Ios 如何以编程方式执行展开顺序?
使用故事板这是非常容易的。您只需将操作拖动到“退出”。但是我应该如何从代码中调用它呢Ios 如何以编程方式执行展开顺序?,ios,segue,ios6,Ios,Segue,Ios6,使用故事板这是非常容易的。您只需将操作拖动到“退出”。但是我应该如何从代码中调用它呢 创建一个手动序列(按ctrl键从文件所有者拖动以退出) 在绿色退出按钮下方的左侧控制器菜单中选择它 插入要展开的段的名称 然后,-(void)performsguewithidentifier:(NSString*)identifier sender:(id)sender。与您的segue标识一起。我使用了[自我解除视图控制器激活:是完成:否]将返回调用的视图控制器供参考:为了使@Vadim的回答能够使用从视
然后,
-(void)performsguewithidentifier:(NSString*)identifier sender:(id)sender。
与您的segue标识一起。我使用了[自我解除视图控制器激活:是完成:否]
将返回调用的视图控制器
供参考:为了使@Vadim的回答能够使用从视图控制器中调用的手动展开顺序操作,您必须放置以下命令:
[self performSegueWithIdentifier:(NSString*) identifier sender:(id) sender];
在被重写的类方法中,ViewDid出现如下情况:
-(void) viewDidAppear:(BOOL) animated
{
[super viewDidAppear: animated];
[self performSegueWithIdentifier:@"SomeSegueIdentifier" sender:self];
}
如果您将它放在其他ViewController方法中,如viewDidLoad或ViewWillDisplay,它将被忽略。引用苹果公司关于展开顺序的技术说明: 要添加仅以编程方式触发的展开序列,请control+从场景的“视图控制器”图标拖动到其“退出”图标,然后从弹出菜单中选择新序列的展开操作
向后兼容的解决方案,适用于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的回答对我有用。我还要补充一点,为了手动触发顺序,请使用:
[self performSegueWithIdentifier:@"mySegueName" sender:self];
在ViewController中,您还必须在情节提要和RHS上的属性视图中选择ViewController场景下的展开序列,确保标识符字段包含代码中引用的名称(“上面示例中的mySegueName”)
如果省略此步骤,上面的一行将抛出一个异常,即序列名称未知。
bradleygriffith
的答案非常好。我采取了第10步,并做了一个简化的屏幕截图。这是Xcode 6中的屏幕截图
展开序列
:以下是目标C和Swift的完整答案: 1) 在目标视图控制器(您要转到的位置)中创建一个
iAction
unwind segue。实现文件中的任意位置
// Objective C
- (IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue {
}
// Swift
@IBAction func unwindToContainerVC(segue: UIStoryboardSegue) {
}
2) 在源代码视图控制器(从中分离的控制器)上,⌃ + 从“活动名称”拖动以退出。您应该在弹出窗口中看到在步骤1中创建的展开序列。(如果看不到,请回顾第一步)。从弹出窗口中选择unwindToContainerVC:或任何您命名的方法,以将源控制器连接到unwind IBAction
3) 在序列图像板的源代码视图控制器的文档大纲中选择序列(它将在底部附近列出),并为其指定一个标识符
4) 使用此方法从源代码视图控制器调用展开序列,替换展开序列名称
//目标C
[self-PerformsgueWithIdentifier:@“unwindToContainerVC”发送方:self]代码>
//迅捷的
self.performsguewithidentifier(“unwindToContainerVC”,发件人:self)
注意。使用unwind方法上segue参数的sourceViewController属性访问源控制器上的任何公开属性。另外,请注意,该框架处理解除源代码控制器。如果您想确认这一点,请向源控制器添加一个dealloc方法,该方法带有一条日志消息,一旦终止就会触发。如果dealloc未触发,您可能有一个保留周期。SWIFT 4:
1。创建一个@iAction,在控制器内部设置一个segue,以便将其释放到:
@IBAction func unwindToVC(segue: UIStoryboardSegue) {
}
2.在情节提要中,从要从ctrl中分离(展开)的控制器,然后从控制器符号拖动到退出符号,并选择先前创建的方法:
3.现在您可以注意到,在文档大纲中,有一行标题为“Unwind segue…”的新行。现在,您应该单击此行并打开属性检查器来设置标识符(在我的例子中是unwindSegueIdentifier)
4.你差不多完成了!现在,您需要打开希望从中展开的视图控制器,并创建一些执行segue的方法。例如,您可以添加按钮,将其与带有@IBAction的代码连接,然后在此IBAction内添加perfromSegue(带标识符:发送者:)方法:
@IBAction func unwindToSomeVCWithSegue(_ sender: UIButton) {
performSegue(withIdentifier: "unwindSegueIdentifier", sender: nil)
}
这就是你要做的一切 Swift 4.2,Xcode 10+
对于那些想知道如何使用未通过故事板设置的VCs执行此操作的人(那些通过搜索“编程”+“释放序列”来回答此问题的人)
鉴于您无法通过编程方式设置展开序列,最简单的单独编程解决方案是调用:
navigationController?.popToRootViewController(动画:true)
这会将堆栈上的所有视图控制器弹出回根视图控制器
要仅从导航堆栈中弹出最顶部的视图控制器,请使用:
navigationController?.popViewController(动画:true)
我发现这是一个有效的问题——我自己也有。您可以通过1以编程方式执行展开序列。创建手动序列(ctrl从文件所有者拖动以退出),2。在IB中给它命名,然后是3。在您的代码中使用标识符:发件人:执行正常-性能测试。IMO不应关闭此问题。投票关闭此问题的用户似乎没有Obj-C/Cocoa Touch背景。Yang:如何命名?我只使用[self dismissViewControllerAnimate]
@IBAction func unwindToSomeVCWithSegue(_ sender: UIButton) {
performSegue(withIdentifier: "unwindSegueIdentifier", sender: nil)
}