如何使用转场

Posted

技术标签:

【中文标题】如何使用转场【英文标题】:How to use segues 【发布时间】:2014-03-13 15:17:45 【问题描述】:

我正在 Xcode 中创建一个应用程序,该应用程序当前由导航控制器、表格视图控制器和常规视图控制器组成。

我正在使用 StoryBoard 并在表格视图和常规视图控制器之间创建了一个 segue。在导航栏中,我有一个按钮,我已将其拖到 StoryBoard 中的视图控制器上。当我点击按钮时,新的 View Controller 会像预期的那样被查看。然后我尝试从表格视图控制器传递数据,见下文:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

    if ([[segue identifier] isEqualToString:@"läggTill"])
    
        // Get reference to the destination view controller
        AddPlayerViewController *apv = [segue destinationViewController];

        [apv.myTextField setText:@"hello"];

    


segue 标识符是“läggTill”,但 if 语句中的代码没有执行。

两个问题:

这种方法有什么问题?

这是使用 StoryBoard 的最佳方法吗?我可以通过 viewWillDisappear 传递数据吗?

我可以使用 segues 将数据从视图控制器传回表视图控制器吗?

【问题讨论】:

您可以尝试更改 segue 标识符以在您的代码和情节提要中仅使用英文字符。 Storyboard中的segue标识符是否同名? 我可以使用 segues 将数据从视图控制器传回表视图控制器吗?使用委托来做到这一点。 您的 myTextField 是否在 AddPlayerViewController 上?在您发布的代码中,您获得了对目标视图控制器的引用并将其称为 apv 但将 myTextField 设置在 avc 上?这只是一个错字还是设置了完全不同的东西? 好吧,我在这里更改了代码示例。我在我的程序中使用了正确的。 【参考方案1】:

prepareForSegue:sender: 中传递您的数据是非常有意义的。我不建议在 viewWillDisappear 中传递数据,因为它只会让它变得混乱并且降低可读性 + 变得更难跟踪。

我认为您的字符串比较不起作用!在控制台上为您的标识符字符串放置一个 NSLog。相比之下,我感觉它可能不喜欢“ä”字符。

关于你的最后一个问题,正如 Gabriel.Massana 指出的那样,对于传回数据,使用委托是要走的路。

注意 1: 我注意到的另一个问题是您可能有“apv”和“avc”的拼写错误。

注意 2: 失败的另一个原因是您在目标控制器上调用 viewDidLoad 之前设置了 TextField。我建议将其作为字符串传递,并在您的目的地的viewDidLoad 中,将文本设置为您的 TextField。

【讨论】:

@iHank 在您的故事板中单击您的 segue 并仔细检查标识符。看看它是否与你的字符串匹配。 谢谢,这篇文章很有用!好像我将segue命名为“läggTIll”,而不是“läggTill”。我是在使用 NSLog 的时候看到的。 很高兴能帮上忙 :) 编码愉快!

以上是关于如何使用转场的主要内容,如果未能解决你的问题,请参考以下文章

如何使用情节提要从 UIBarButtonItem 触发转场?

如何在不使用故事板转场的情况下添加动画链式过渡系统?

如何使用情节提要从自定义 uitableviewcell 正确启动弹出框转场

如何在多个 .xib 文件之间执行展开转场(不使用情节提要)

如何执行条件转场

IOS:如何仅使用轻击手势同时允许触发的转场和发送的动作