2

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

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

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

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

4

2 回答 2

3

我知道这已经得到了回答(做得很好 ttarules),但我想我会传递一些额外的评论。在导航控制器中嵌入某种类型的视图控制器是很常见的。将标准视图控制器包装在导航控制器中,然后对其进行模态转场,为您提供模态场景,并带有一个漂亮的导航栏来放置按钮等。同样在 iPad 上,替换转场通常可以使用导航控制器。这完全取决于您如何设计事物,但如果您知道控制器如何堆叠以及如何轻松引用它们,您将拥有更多设计选择。这是一个片段,您可以在准备 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-03-12T02:58:00.973 回答
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,然后从那里找出它。

于 2013-03-12T00:05:09.693 回答