为了账号安全,请及时绑定邮箱和手机立即绑定

以编程方式创建segue

/ 猿问

以编程方式创建segue

暮色呼如 2019-07-08 15:39:33

以编程方式创建segue

我有个共同点UIViewController我所有的UIViewsControllers扩展到重用一些常见操作。

我想在这个“公共”上建立一个UIViewController所以其他人UIViewControllers继承。

我正在努力弄清楚如何通过编程来实现这个目标。

我想问题也可能是如何设置segue为了我UIViewControllers而不是走进故事板用手做的。


查看完整描述

3 回答

?
繁星淼淼

顾名思义,不能脱离故事板而独立存在。它甚至是以全班的名义出现的:UIStoryboardSegue..您不会以编程的方式创建segue-是故事板运行时为您创建的。你通常可以打电话给performSegueWithIdentifier:在视图控制器的代码中,但是这依赖于已经在故事板中设置了一个segue来引用。

不过,我认为您要问的是如何在您的公共视图控制器(基类)中创建一个方法,该方法将转换为一个新的视图控制器,并由所有派生类继承。可以通过为基类视图控制器创建类似于此的方法来做到这一点:

- (IBAction)pushMyNewViewController{
    MyNewViewController *myNewVC = [[MyNewViewController alloc] init];

    // do any setup you need for myNewVC

    [self presentModalViewController:myNewVC animated:YES];}

然后在派生类中,在单击适当的按钮或选择表行或其他任何操作时调用该方法。


查看完整回答
反对 回复 2019-07-08
?
慕工程0101907

我想再增加一种可能性。您可以做的一件事是,您可以使用未附加到操作的segue连接故事板中的两个场景,然后以编程方式在视图控制器内触发segue。您这样做的方式,是您必须从文件的所有者图标在故事板场景的底部,这是一个敏感的场景,并右拖动到目标场景。我再加一张图片来解释。

弹出窗口将显示“手动段”。我选推作为类型。点击小方块,确保你在属性检查器中。给它一个标识符,您将使用它在代码中引用它。

好的,接下来我将使用一个编程栏按钮项目进行转换。在viewDidLoad或其他地方,我将使用以下代码在导航栏上创建一个按钮项:

UIBarButtonItem *buttonizeButton = [[UIBarButtonItem alloc] initWithTitle:@"Buttonize"
                                         style:UIBarButtonItemStyleDone
                                target:self
  action:@selector(buttonizeButtonTap:)];self.navigationItem.rightBarButtonItems = @[buttonizeButton];

好的,注意选择器是BuonizeButtonTap:。因此,为该按钮编写一个void方法,在该方法中,您将调用segue,如下所示:

-(void)buttonizeButtonTap:(id)sender{
    [self performSegueWithIdentifier:@"Associate" sender:sender];
    }

在调用preareForSegue时,需要发送方参数来标识按钮。preareForSegue是一个框架方法,在这个方法中,您将实例化场景,并传递它执行其工作所需的任何值。下面是我的方法:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if ([[segue identifier] isEqualToString:@"Associate"])
    {
        TranslationQuizAssociateVC *translationQuizAssociateVC = [segue destinationViewController];
        translationQuizAssociateVC.nodeID = self.nodeID; //--pass nodeID from ViewNodeViewController
        translationQuizAssociateVC.contentID = self.contentID;
        translationQuizAssociateVC.index = self.index;
        translationQuizAssociateVC.content = self.content;
    }}

好吧,测试一下就行了。希望它能帮到你。


查看完整回答
反对 回复 2019-07-08
?
斯蒂芬大帝

我一直在使用这段代码实例化我的自定义segue子类并以编程方式运行它。好像很管用。这个有什么问题吗?我很困惑,阅读了所有其他的答案,说这是做不到的。

UIViewController *toViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"OtherViewControllerId"];
MyCustomSegue *segue = [[MyCustomSegue alloc] initWithIdentifier:@"" source:self destination:toViewController];
[self prepareForSegue:segue sender:sender];[segue perform];


查看完整回答
反对 回复 2019-07-08

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信