Segues 不能以编程方式工作

Posted

技术标签:

【中文标题】Segues 不能以编程方式工作【英文标题】:Segues not working programmatically 【发布时间】:2013-08-22 18:46:22 【问题描述】:

根据以下说明,我将一个项目从使用 XIB 迁移到 Storyboard:https://***.com/a/9708723/2604030 进展顺利。 但是我不能让 segues 以编程方式工作,我需要以这种方式使用它们,因为我有 2 个按钮链接到同一个 ViewController,但类型不同,希望你能从这张图片中理解为什么。

有2个难度模式按钮。我使用的代码:

`- (IBAction)btnNormalAct:(id)sender 
    LevelController *wc = [[LevelController alloc] initWithNibName:@"LevelController" type:0];
    [self.navigationController pushViewController:wc animated:YES];


- (IBAction)btnTimedAct:(id)sender 
    LevelController *wc = [[LevelController alloc] initWithNibName:@"LevelController" type:1];
    [self.navigationController pushViewController:wc animated:YES];
`

这在我使用 XIB 时有效,而且我确信我在故事板的 VC 中正确链接了所有内容。如果我从情节提要中制作海格,它们就会起作用。但是我该如何处理这种情况。

另外:当从 XIB 更改为 Storyboard 时,这些台词好吗?这是进行此更改的正确方法(上面链接中显示的方式)吗?

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

【问题讨论】:

【参考方案1】:

您可以使用PrepareForSegue 方法在传入的视图控制器被调用之前对其进行设置:

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

    // Make sure your segue name in storyboard is the same as this line
    if ([[segue identifier] isEqualToString:@"YOUR_SEGUE_NAME_HERE"])
    
        // Get reference to the destination view controller
        LevelController *vc = [segue destinationViewController];

        // Pass any objects to the view controller here, like...
        [vc setType:1];
    

【讨论】:

像魅力一样工作!非常感谢:) @Sebyddd 没问题,很高兴我能帮上忙 如果您想在代码中触发 segue,请使用: performSegueWithIdentifier:sender:【参考方案2】:

不要使用按钮操作。将 segues 连接到按钮并为 segues 提供唯一标识符。然后在你的控制器中实现prepareForSegue:sender:。当方法触发时,检查序列标识符并在 `destinationViewController' 上设置适当的类型。

使用情节提要时,您应该从情节提要中实例化您的控制器,而不是使用initWithNibName:bundle:。这是通过给每个视图控制器一个唯一的标识符然后在情节提要上调用instantiateViewControllerWithIdentifier:(或者,对于初始视图控制器,只是instantiateInitialViewController)来完成的,你可以从当前控制器获得(或者如果需要storyboardWithName:bundle: )。

【讨论】:

谢谢!你能解释一下如何从情节提要中实例化控制器吗? @Sebyddd 您可以将右侧窗格中的类设置为情节提要中的控制器,我没有打开 XCode 来为您提供选项卡的具体名称,但其中一个让我们您选择要使用的控制器。 我发现了。我试过这个:i.cubeupload.com/tQZjPL.png 但我得到了那个错误......

以上是关于Segues 不能以编程方式工作的主要内容,如果未能解决你的问题,请参考以下文章

setNavigationBarHidden 不能以编程方式工作?

Segues 和 Segues 不工作的条件

无法以编程方式执行 unwind segue

UIImageView .scaleAspectFit 和自动布局不能从 Swift 以编程方式工作

Xcode 6 中 Mac OS 应用程序的 Storyboard segues

为啥文本字段委托不能以编程方式在文本字段上使用设置文本?