将导航控制器添加到视图时无法传递数据
Posted
技术标签:
【中文标题】将导航控制器添加到视图时无法传递数据【英文标题】:Can not pass data when adding navigation controller to view 【发布时间】:2015-05-27 10:33:27 【问题描述】:我有一个带有三个选项卡的 TabBarController。所有选项卡的视图都嵌入到它们自己的导航控制器中,除了一个,地图视图。 要从其他视图之一导航到 Map 视图并传递我使用的数据:
- (IBAction)mapButton:(id)sender
MapViewController *destView = (MapViewController *)[self.tabBarController.viewControllers objectAtIndex:0];
if ([destView isKindOfClass:[MapViewController class]])
MapViewController *destinationViewController = (MapViewController *)destView;
destinationViewController.selectedTruck = _truck;
[self.tabBarController setSelectedIndex:0];
而且它正在工作。现在我还需要将 Map 视图嵌入到导航控制器中,以添加详细视图,但是当我没有传递数据时,它只会进入 Map 视图。
谁能看到我错过了什么?
【问题讨论】:
destView 可能为零?它会给你一个真实的 isKindOfClass 但这并不意味着它不是 nil ? 我无法理解您的问题。 可以上传storyboard的图片吗? 【参考方案1】:[self.tabBarController.viewControllers objectAtIndex:0]
不再是MapViewController
的实例。它是一个UINavigationController
,以MapViewController
作为其根视图控制器。
您可以像这样通过UINavigationController
访问MapViewController
,但是所有这些类型转换假设都很混乱-
- (IBAction)mapButton:(id)sender
UINavigationController *navigationController = (UINavigationController *)[self.tabBarController.viewControllers firstObject];
if ([navigationController isKindOfClass:[UINavigationController class]])
MapViewController *rootViewController = (MapViewController *)[navigationController.viewControllers firstObject];
if ([rootViewController isKindOfClass:[MapViewController class]])
MapViewController *destinationViewController = (MapViewController *)rootViewController;
destinationViewController.selectedTruck = _truck;
[self.tabBarController setSelectedIndex:0];
相反,更好的设计是在设置标签栏时保留对MapViewController
的引用(作为属性)。这样,您只需调用 self.destinationViewController.selectedTruck = _truck;
。
【讨论】:
感谢您的回答。所以我会使用这样的东西? UINavigationController *destViewNVC = [[self storyboard] instantiateViewControllerWithIdentifier:@"MapNavVC"];但是然后呢?对不起,我对此有点陌生。以上是关于将导航控制器添加到视图时无法传递数据的主要内容,如果未能解决你的问题,请参考以下文章
bar button item segue 不在下一个视图顶部添加导航栏