【问题标题】:Pass value to tableview with navigation controller storyboard使用导航控制器故事板将值传递给 tableview
【发布时间】:2013-02-27 08:30:40
【问题描述】:

如何将值传递给具有导航控制器的表视图控制器?

我有代码可以推送新的视图控制器并使其处于活动状态,但无法将值传递给表视图。

UIViewController *newTopViewController = [self.storyboard instantiateViewControllerWithIdentifier:identifier];

问题是我将导航控制器拖到情节提要上,并且它附加到了表格视图。我将该表格视图链接到我的自定义表格视图类。当我从名称“nav”(导航控制器的故事板 ID)实例化视图控制器时,我将导航控制器作为正在实例化的视图控制器(newTopViewController);那么如何将我实例化视图的值传递给 tableview 控制器?

【问题讨论】:

    标签: iphone ios5 ios6 storyboard uistoryboardsegue


    【解决方案1】:

    如果你已经打算去那个 VC,你应该在 prepareForSegue 中传递它。

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        if([[segue identifier] isEqualToString:@"whateverYourSegueIsCalled"])
       {
            YourTableViewController *tableView=(YourTableViewController*)segue.destinationViewController;
            tableView.anyPublicProperty = yourValue;
        }
    }
    

    编辑:

    好吧,既然你实际上只是嵌入了 tableView,你只需要访问 navigationViewController 的 viewControllers 属性..

    所以它会在你的 navigationViewController 类中是这样的:

    YourTableViewController *tableView = (YourTableViewController*)[self.navigationController.viewControllers objectAtIndex:0];
    tableView.yourPublicProperty = whateverValueYouWant;
    

    -除非您还嵌入了其他 VC,否则您的 tableView 将是索引 0 处的对象。因此,您可以打印出您的 vc,然后从那里找出来。

    【讨论】:

    • 但该代码必须在 UINavigationcontroller 类中才能被捕获。您是否建议我创建一个自定义 UINavigationController 来传递值?另外需要澄清的是,当您将导航控制器拖放到情节提要上并看到连接到它的 tableview 时,它并不是一个 segue,而是您看到的 (dot)-(dot) 符号。
    • 我想我误解了你的问题。您想将值从 navVC 传递到 tableVC?你是否从导航视图控制器进入 tableView 控制器?
    • 编辑后,我假设您的意思是 tableView 嵌入(即点点?)在导航控制器内?
    • 是的,问题是我将导航控制器拖到情节提要上,并且它附加到了表格视图上。我将该表格视图链接到我的自定义表格视图类。当我从名称“nav”(导航控制器的故事板 ID)实例化视图控制器时,我将导航控制器作为正在实例化的视图控制器;那么如何将我实例化视图的值传递给 tableview 控制器?
    • 啊,嵌入...是的,这就是我要找的词,所以是的,表格视图嵌入在导航控制器中。
    【解决方案2】:

    我知道这已经得到解答(做得很好 ttarules),但我想我会传递一些额外的 cmets。在导航控制器中嵌入某种类型的视图控制器是很常见的。将标准视图控制器包装在导航控制器中,然后对其进行模态转场,为您提供模态场景,并带有一个漂亮的导航栏来放置按钮等。同样在 iPad 上,替换转场通常可以使用导航控制器。这完全取决于您如何设计事物,但如果您知道控制器如何堆叠以及如何轻松引用它们,您将拥有更多设计选项。这是一个 sn-p,您可以在 prepare for segue 方法中使用它来轻松检测它。

    if ([segue.destinationViewController isKindOfClass:[UINavigationController class]]) {
    
        //note: have to get reference to next vc through nav controller
        self.nextViewController = [[(UINavigationController*)segue.destinationViewController viewControllers]lastObject];
    }
    else {
        self.nextViewController = segue.destinationViewController;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-02-03
      • 2012-03-10
      • 2015-05-31
      • 2014-01-12
      • 2013-01-10
      • 1970-01-01
      • 2020-08-30
      • 1970-01-01
      • 2014-06-26
      相关资源
      最近更新 更多