如何以编程方式打开我的导航控制器?

时间:2014-03-07 21:33:35

标签: ios uinavigationcontroller uistoryboard

我不喜欢WYSIWYG /视觉编程的一个方面就是,当你到达需要走出盒子的地方时,你会感到头疼。我现在正沿着我的iOS学习曲线走到这一点。

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

enter image description here

过去,在以下教程中,我会控制 - 从一些控件拖动一个链接到中间的NavigationController节目,我会告诉它是一个模态segue,调整几个方法,并得到一个箭头连接两个为了我的努力。

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

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

2 个答案:

答案 0 :(得分: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

您还必须在具有集合视图的视图控制器中创建委托属性,并使用加号作为委托来设置视图控制器。互联网上有很多例子。我希望这能为你指明正确的方向。

答案 1 :(得分:1)

在故事板中创建segue后,您可以通过调用

以编程方式随时启动segue
  

[self performSegueWithIdentifier:@“segueID”发件人:person];

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

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

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

  
      
  • (无效)viewWillAppear中:(BOOL)动画
  •   
  • (无效)viewDidAppear:(BOOL)动画
  •