我有一个 UITabBarController,它加载 2 个 UIViewController:一张 map 和一张表格。单击 tabBarItem 时,我捕获该事件并在目标 View 上设置一些属性:
- (void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
if([viewController.tabBarItem.title isEqualToString:@"Map"]) {
MapViewController *MVC = [tabBarController.childViewControllers objectAtIndex: viewController.tabBarController.selectedIndex];
MVC.billboards = self.billboards;
MVC.rangeMaxWidth = self.rangeMaxWidth;
MVC.rangeMaxHeight = self.rangeMaxHeight;
MVC.APIRoot = self.APIRoot;
}
}
现在上面的代码工作得很好;但是,当我尝试对 TableView 执行相同的操作时,我收到了一个神秘的错误。完整代码如下:
- (void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
if([viewController.tabBarItem.title isEqualToString:@"Map"]) {
MapViewController *MVC = [tabBarController.childViewControllers objectAtIndex: viewController.tabBarController.selectedIndex];
MVC.billboards = self.billboards;
MVC.rangeMaxWidth = self.rangeMaxWidth;
MVC.rangeMaxHeight = self.rangeMaxHeight;
MVC.APIRoot = self.APIRoot;
} else if ([viewController.tabBarItem.title isEqualToString:@"Manage"]) {
ManageBillboardsController *MBC = [tabBarController.childViewControllers objectAtIndex: viewController.tabBarController.selectedIndex];
MBC.aNumber = [[NSNumber alloc] initWithInt:3];
}
}
-[UINavigationController setANumber:]:无法识别的选择器发送到实例 0x9e91400 2013-06-27 15:09:18.624 Billboard[3269:c07] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UINavigationController setANumber:]:无法识别的选择器发送到实例 0x9e91400 '
我想我已经仔细检查了所有内容,并且两个 View 的所有内容似乎都是相同的。所以我不明白为什么这适用于 map View 但不适用于表格。
提前致谢。
* 解决方案 *
- (void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
if([viewController.tabBarItem.title isEqualToString:@"Map"]) {
MapViewController *MVC = [tabBarController.childViewControllers objectAtIndex: viewController.tabBarController.selectedIndex];
MVC.billboards = self.billboards;
MVC.rangeMaxWidth = self.rangeMaxWidth;
MVC.rangeMaxHeight = self.rangeMaxHeight;
MVC.APIRoot = self.APIRoot;
} else if ([viewController.tabBarItem.title isEqualToString:@"Manage"]) {
UINavigationController *NC = [tabBarController.childViewControllers objectAtIndex: viewController.tabBarController.selectedIndex];
NSArray *controllers = [NC childViewControllers];
for(id item in controllers){
ManageBillboardsController *MBC = item;
MBC.aNumber = [[NSNumber alloc] initWithInt:3];
}
}
}
最佳答案
看起来您的表格 View 位于 UINavigationController
内。所以 MBC
应该是 UINavigationController
类型,然后获取你的表格 View (如果它在顶部),如下所示:
MBC.topViewController
然后在其上设置aNumber
。
关于ios - UITabBarController 和 UIViewController 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17354111/