ios - UITabBarController 和 UIViewController 转换

标签 ios objective-c uiviewcontroller uitabbarcontroller

我有一个 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/

相关文章:

android - 是否可以在后台实现不间断的 API 端点 ping?

android - 如何检查文本字段是否包含 flutter 的字符串?

iphone - MBProgressHUD armv7 错误

ios - View 设计未显示在 ViewController 中

ios - BaseViewController 子类未在 swift 3 中发布

iphone - Cordova 3.1 在 iOS6 上的 Safari 中打开链接

ios - 为 Xcode 创建图标的应用程序

ios - 我很难从 objective-c 中的复制对象中保留属性值

ios - 以编程方式获取iPad设备信息

ios - 自定义 UINavigationController 动画完成后无响应