使用故事板非常简单。你只需将动作拖到“退出”。但是如何从代码中调用它呢?
当前回答
我使用[self disdisviewcontrolleranimated: YES completion: nil];它会将你返回到调用ViewController。
其他回答
向后兼容的解决方案,将工作于ios6之前的版本,为那些感兴趣:
- (void)unwindToViewControllerOfClass:(Class)vcClass animated:(BOOL)animated {
for (int i=self.navigationController.viewControllers.count - 1; i >= 0; i--) {
UIViewController *vc = [self.navigationController.viewControllers objectAtIndex:i];
if ([vc isKindOfClass:vcClass]) {
[self.navigationController popToViewController:vc animated:animated];
return;
}
}
}
Vishal Chaudhry的回答对我很有用。我还会添加,为了手动触发seque使用:
[self performSegueWithIdentifier:@"mySegueName" sender:self];
在ViewController中,你还必须在故事板中ViewController的场景下选择unwind segue,并在RHS的属性视图中确保标识符字段包含你在代码中引用的名称(在上面的例子中是“mySegueName”)。
如果省略此步骤,上面的行将抛出一个异常,表示序列名未知。
供你参考:为了让@Vadim的答案与视图控制器中调用的手动unwind seque动作一起工作,你必须放置命令:
[self performSegueWithIdentifier:(NSString*) identifier sender:(id) sender];
在被重写的类方法viewDidAppear内部,如下所示:
-(void) viewDidAppear:(BOOL) animated
{
[super viewDidAppear: animated];
[self performSegueWithIdentifier:@"SomeSegueIdentifier" sender:self];
}
如果你把它放在其他ViewController方法中,比如viewDidLoad或viewWillAppear,它会被忽略。
Swift 4.2, Xcode 10+
对于那些不知道如何通过故事板建立风险投资的人(那些从搜索“程序化”+“unwind segue”中得到这个问题的人)。
鉴于你不能通过编程方式设置unwind segue,最简单的纯编程解决方案是调用:
导航控制器?。popToRootViewController(动画:真)
它会弹出堆栈上的所有视图控制器回到你的根视图控制器。
要从导航堆栈中弹出最顶层的视图控制器,使用:
导航控制器?。会被(动画:真)
引用苹果关于Unwind Segue的技术说明: 要添加一个只会被编程触发的unwind segue,从场景的视图控制器图标control+拖动到它的退出图标,然后从弹出菜单中为新segue选择一个unwind动作。
技术说明链接
推荐文章
- 如何使用Xcode创建。ipa文件?
- 动态改变UILabel的字体大小
- 在iPhone上确定用户是否启用了推送通知
- 是否有可能禁用浮动头在UITableView与UITableViewStylePlain?
- 错误ITMS-9000:“冗余二进制文件上传。火车1.0版本已经有一个二进制版本上传。
- Swift -转换为绝对值
- 从父iOS访问容器视图控制器
- 自定义dealloc和ARC (Objective-C)
- 调整UITableView的大小以适应内容
- 在代码中为UIButton设置一个图像
- NSRange从Swift Range?
- UICollectionView中的单元格间距
- 我如何在我的iOS应用程序中每n分钟得到一个后台位置更新?
- 如何使用iOS创建GUID/UUID
- 禁用所呈现视图控制器的交互式撤销