Xcode 使用导航后退按钮展开序列

Xcode 使用导航后退按钮展开序列,xcode,storyboard,segue,Xcode,Storyboard,Segue,我已经观看了苹果的演示视频,在情节串连板上实现了“展开分段”部分,并在主视图上看到了使用自定义按钮的演示。那很好 我在这里也看到了一个很好的例子 但是,我希望有一个正常的推送序列从父视图(带有主表单数据)传递到子视图(带有高级设置选项),然后使用导航栏中的“后退”按钮返回到父视图控制器,而不是使用视图上的自定义按钮,如演示所示。然后,当按下父控制器上的另一个保存按钮时,父控制器会将所有内容保存到API服务器 我似乎无法覆盖导航后退按钮以将其指向我的“放松”序列动作,并且由于后退按钮未出现在情节提

我已经观看了苹果的演示视频,在情节串连板上实现了“展开分段”部分,并在主视图上看到了使用自定义按钮的演示。那很好

我在这里也看到了一个很好的例子

但是,我希望有一个正常的推送序列从父视图(带有主表单数据)传递到子视图(带有高级设置选项),然后使用导航栏中的“后退”按钮返回到父视图控制器,而不是使用视图上的自定义按钮,如演示所示。然后,当按下父控制器上的另一个保存按钮时,父控制器会将所有内容保存到API服务器

我似乎无法覆盖导航后退按钮以将其指向我的“放松”序列动作,并且由于后退按钮未出现在情节提要上,因此我无法将绿色的“退出”按钮拖动到该按钮上

我在viewDidLoad中尝试了这个方法,以避免动作过度,但它不起作用 [self.navigationItem.backBarButtonim setAction:@selector(unwindSegueAction:)]

是否可以使用“后退”按钮松开一个按钮段

到目前为止,我最好的想法是从viewDidLoad方法中重写back按钮,但这会删除有角度的back按钮样式,而且似乎是对一个简单问题的粗略修改

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStyleBordered target:self action:@selector(unwindSegue:)];

我知道使用协议和委托会有答案,但我对使用Xcode4.5展开segue方法感兴趣。最后,我不需要展开segue,因为我仍然可以通过跟随导航控制器获得对父控制器方法的引用

我可以通过在子控制器的
-(void)viewwilldemouse:(BOOL)animated
方法中执行以下操作来获得参考

NSInteger currentVCIndex = [self.navigationController.viewControllers indexOfObject:self.navigationController.topViewController];

FirstViewController *parent = (FirstViewController *)[self.navigationController.viewControllers objectAtIndex:currentVCIndex];

parent.barcodeType = indexPath.row;
将设置变量完美地传递回原始控制器


我还在childcontroller顶部添加了对父控制器的导入引用。

@Alan在正确的轨道上。只需添加一个测试,以防止segue在不返回第一视图控制器时触发。ViewWillEnglish中的类似内容实际上允许您为后退按钮执行“展开”顺序。您需要通过从类向下拖动到退出图标来创建手动展开序列。一定要在创建它之后给它命名

NSInteger currentVCIndex = [self.navigationController.viewControllers indexOfObject:self.navigationController.topViewController];

FirstViewController *parent = (FirstViewController *)[self.navigationController.viewControllers objectAtIndex:currentVCIndex];

parent.barcodeType = indexPath.row;
UIViewController *vc = self.navigationController.topViewController;
if ([FirstViewController class] == [vc class])
{
    [self performSegueWithIdentifier:@"unwindSegue" sender:self];
}

我想添加一个遵循上述@Chuck H建议的Swift解决方案:

let rootVC = self.navigationController!.topViewController
if rootVC.isKindOfClass(TheNameOfYourViewController) {
    performSegueWithIdentifier("yourNamedSegueIdentifier", sender: self)
}

您可能没有考虑的另一种方法是将父对象作为子对象的委托,并在子对象中使用委托方法来更新父对象


这样,您就不需要添加到导航展开中,因为在您回击时,父项已经是最新的。

好主意,如果您的视图控制器也可以继续,可能会出现问题。或者,如果你有另一个模式,可以在这个模式之上触发。我有同样的问题,我使用的是Swift。您能否以Swift提供上述解决方案?谢谢