31

我已经观看了关于情节提要实现的 Apple 演示视频,其中包含 unwind segues 部分,并使用主视图上的自定义按钮观看了演示。这很好用。

我也在这里看到了同样的事情的一个很好的例子,它也有效。http://www.techotopia.com/index.php/Using_Xcode_Storyboard_%28iOS_6%29#Unwinding_Storyboard_Segues

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

我似乎无法覆盖导航后退按钮以将其指向我的展开 segue 操作,并且由于后退按钮没有出现在情节提要上,我无法将绿色退出按钮拖到它

我在 viewDidLoad 中尝试了这个来覆盖操作,但它没有工作 [self.navigationItem.backBarButtonItem setAction:@selector(unwindSegueAction:)];

是否可以使用后退按钮来展开 push segue?

到目前为止,我最好的想法是从 viewDidLoad 方法中覆盖后退按钮,但这会删除有角度的后退按钮样式,并且似乎对一个简单问题的粗略破解

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

我知道有使用协议和委托的答案,但我有兴趣使用 Xcode4.5 unwind segue 方法

4

4 回答 4

14

最后,我不需要展开 segue,因为我仍然可以通过遵循导航控制器来获得对父控制器方法的引用。

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

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

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

parent.barcodeType = indexPath.row;

它将设置变量完美地传递回原始控制器。

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

于 2012-11-26T11:35:34.173 回答
6

@Alan 走在正确的轨道上。只需添加一个测试以防止在不返回第一个视图控制器时触发 segue。viewWillDisappear 中的类似内容实际上允许您为后退按钮执行展开转场。您需要通过从类向下拖动到退出图标来创建手动展开转场。请务必在创建后为其命名。

UIViewController *vc = self.navigationController.topViewController;
if ([FirstViewController class] == [vc class])
{
    [self performSegueWithIdentifier:@"unwindSegue" sender:self];
}
于 2014-10-15T01:12:53.017 回答
5

I'd like to add a Swift solution that follows @Chuck H suggestion above:

let rootVC = self.navigationController!.topViewController
if rootVC.isKindOfClass(TheNameOfYourViewController) {
    performSegueWithIdentifier("yourNamedSegueIdentifier", sender: self)
}
于 2015-09-04T13:57:13.100 回答
1

An alternative you might have not considered is to make the parent a delegate of the child and use delegate methods in the child to update the parent.

That way you would bypass the need to add to the navigation unwind, because the parent is already up to date the moment you hit back.

于 2015-12-16T17:23:59.513 回答