使用导航控制器故事板将值传递给tableview

时间:2013-03-11 23:58:13

标签: iphone ios5 ios6 storyboard uistoryboardsegue

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

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

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

问题是我将导航控制器拖到故事板上,它附加到了一个tableview。我将该tableview链接到我的自定义tableview类。当我从名为“nav”的实例化视图控制器时,这是导航控制器的故事板id,我得到导航控制器作为实例化的视图控制器(newTopViewController);那么如何从我将视图实例化到tableview控制器的位置传递一个值?

2 个答案:

答案 0 :(得分:3)

我知道这已经回答了(很好地做了ttarules),但我想我会传递一些额外的评论。在导航控制器中嵌入某种类型的视图控制器是很常见的。在导航控制器中包装标准视图控制器然后对其进行模态转换,为您提供模态场景,带有一个很好的导航栏以放置按钮等。另外在iPad上,替换segues通常可以使用导航控制器。这完全取决于你如何设计,但如果你知道控制器如何叠加以及如何轻松地引用它们,你将拥有更多的设计选择。以下是您可以在准备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;
}

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

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

相关问题