【问题标题】:How to open my UINavigationController programmatically?如何以编程方式打开我的 UINavigationController?
【发布时间】:2014-04-11 06:00:03
【问题描述】:

我不喜欢 WYSIWYG/可视化编程的一件事是,当您到达需要跳出框框的地步时,您只能摸不着头脑。我的 iOS 学习曲线现在正处于这样的阶段。

我有一个自定义的 UICollectionView 东西。在两个地方(创建点和编辑点),我需要向用户显示一个列表以启用/禁用(选择/取消选择)列表中的项目。所以我去故事板,然后写出这样的东西:

在过去,按照教程,我会控制并从某个控件拖动一个链接到中间的 NavigationController 显示,我会告诉它是一个模态 segue,调整几个方法,然后得到一个连接两者的箭头为了我的努力。

但在这种情况下,我没有明显的要点可以开始该操作。我确实有一个 + 按钮。但它需要先做一些其他的事情,如果一切顺利,然后以编程方式启动打开,并在返回时以某种方式得到状态通知。对于单个单元格也是如此,他们可能想要配置我的表格控制器,然后打开它,并在它关闭时收到通知。

所以我正在寻找如何做到这一点的秘诀,我应该寻找的关键方法是什么。 Apple 的文档非常适合参考,但我发现弄清楚如何从头开始做某事很困难。

【问题讨论】:

    标签: ios uinavigationcontroller uistoryboard


    【解决方案1】:

    以编程方式创建一个UINavigationController,并将所需的视图控制器设置为根视图控制器。以下是您可以在用户点击加号按钮时调用的方法中放入的示例:

    UIViewController *vc = [[UIStoryboard storyboardWithName:@"YourStoryboardName" bundle:nil] instantiateViewControllerWithIdentifier:@"YourViewControllerID"];
    
    UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:vc];
    
    [self presentViewController:nc
                       animated:YES completion:nil];
    

    要获取状态或有关所选项目的信息,您可以使用 Delegation 并声明协议。示例:

    @protocol YourSampleDelegate <NSObject>
    
    - (void)didSelectItem:(NSObject *)item;
    
    @end
    

    然后,您的视图控制器(带有加号的视图控制器)应该实现此协议:

    @interface ViewController : UIViewController<YourSampleDelegate>
    ...
    @end
    
    @implementation ViewController
    
    ...
    
    #pragma mark - YourSampleDelegate conformance
    
    - (void)didSelectItem:(NSObject *)item;
    {
        // Do something with the item.
    }
    
    @end
    

    您还必须在具有集合视图的视图控制器中创建委托属性,并将带有加号的视图控制器设置为委托。互联网上有大量的例子。我希望这会为您指明正确的方向。

    【讨论】:

      【解决方案2】:

      在情节提要中创建转场后,您可以随时通过调用以编程方式启动转场

      [self performSegueWithIdentifier:@"segueID" sender:person];

      其中“segueID”是您在身份检查器(右侧菜单面板,第 4 个选项卡)的 Identifier 字段中为界面构建器中的 segue 设置的字符串。

      segue 不需要从控件创建,您可以直接从一个视图控制器创建一个到另一个视图控制器。我通常在右侧菜单上通过右键单击一个视图控制器对象并拖动到另一个来执行此操作。这样一来,它就充当了一个转场,您可以随时以编程方式启动它。

      至于在您返回视图控制器时收到通知,(除非我误解了您的问题)您可以使用:

      • (void)viewWillAppear:(BOOL)动画
      • (void)viewDidAppear:(BOOL)动画

      【讨论】:

        猜你喜欢
        • 2016-06-04
        • 2015-03-14
        • 1970-01-01
        • 1970-01-01
        • 2015-08-17
        • 2014-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多