iphone - 另一个 UISplitViewController + UITabBarController 问题

标签 iphone objective-c uitabbarcontroller uisplitviewcontroller

我将多个 UISplitViewControllers 添加到单个 UITabBarController。选项卡出现,并且单击选项卡时每个主/ subview Controller 都会加载并正确显示,但是不知何故用户交互仅适用于最后添加的选项卡。

如果我添加 1 个选项卡,它工作正常,但如果我添加 2 个选项卡,第二个选项卡可以工作,第一个选项卡不会响应用户交互(单击用户界面元素时没有任何反应 - 它们甚至不突出显示以显示点击)。如果我添加 3 个,则前 2 个会中断,而第 3 个可以工作。

我该如何解决这个问题?这是代码(注意:此方法是在启动例程结束时从启动页 View Controller 调用的):

- (void)startIPad 
{
    UINavigationController *localNavigationController;
    UISplitViewController *localSplitViewController;
    UITabBarController *tabBarController = [[UITabBarController alloc] init];
    NSMutableArray *localControllersArray = [[NSMutableArray alloc] init];

    //setup the first tab
    Master1ViewController *viewMaster1 = [[Master1ViewController alloc] init];
    Detail1ViewController *viewDetail1 = [[Detail1ViewController alloc] init];
    localNavigationController = [[UINavigationController alloc] initWithRootViewController:viewDetail1];
    localSplitViewController = [[UISplitViewController alloc] init];
    [localSplitViewController setDelegate:viewDetail1];
    localSplitViewController.viewControllers = [NSArray arrayWithObjects:viewMaster1, localNavigationController, nil];
    [localControllersArray addObject:localSplitViewController];
    [viewMaster1 release];
    [viewDetail1 release];
    [localNavigationController release];
    [localSplitViewController release];

    //setup the second tab
    Master2ViewController *viewMaster2 = [[Master2ViewController alloc] init];
    Detail2ViewController *viewDetail2 = [[Detail2ViewController alloc] init];
    localNavigationController = [[UINavigationController alloc] initWithRootViewController:viewDetail2];
    localSplitViewController = [[UISplitViewController alloc] init];
    [localSplitViewController setDelegate:viewDetail2];
    localSplitViewController.viewControllers = [NSArray arrayWithObjects:viewMaster2, localNavigationController, nil];
    [localControllersArray addObject:localSplitViewController];
    [viewMaster2 release];
    [viewDetail2 release];
    [localNavigationController release];
    [localSplitViewController release];

    //setup the third tab
    ...

    //setup the fourth tab
    ...

    //set the UISplitViewControllers onto the tab bar
    tabBarController.viewControllers = localControllersArray;
    [localControllersArray release];

    //switch to the new root view controller
    [appDelegate.window setRootViewController:tabBarController];
    [tabBarController release];
}

最佳答案

我已经使用您的代码创建了一个虚拟应用程序,并且它在我的应用程序中运行良好。只是我已经像这样初始化了 appDelegate

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    //self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
    //self.window.rootViewController = self.viewController;
    [self startIPad];
    [self.window makeKeyAndVisible];
    return YES;
}



- (void)startIPad
{
    UINavigationController *localNavigationController;
    UISplitViewController *localSplitViewController;
    UITabBarController *tabBarController = [[UITabBarController alloc] init];
    NSMutableArray *localControllersArray = [[NSMutableArray alloc] init];

    //setup the first tab
    Master1ViewController *viewMaster1 = [[Master1ViewController alloc] init];
    Detail1ViewController *viewDetail1 = [[Detail1ViewController alloc] init];
    localNavigationController = [[UINavigationController alloc] initWithRootViewController:viewDetail1];
    localSplitViewController = [[UISplitViewController alloc] init];
    [localSplitViewController setDelegate:viewDetail1];
    localSplitViewController.viewControllers = [NSArray arrayWithObjects:viewMaster1, localNavigationController, nil];
    [localControllersArray addObject:localSplitViewController];
    [viewMaster1 release];
    [viewDetail1 release];
    [localNavigationController release];
    [localSplitViewController release];

    //setup the second tab
    Master2ViewController *viewMaster2 = [[Master2ViewController alloc] init];
    Detail2ViewController *viewDetail2 = [[Detail2ViewController alloc] init];
    localNavigationController = [[UINavigationController alloc] initWithRootViewController:viewDetail2];
    localSplitViewController = [[UISplitViewController alloc] init];
    [localSplitViewController setDelegate:viewDetail2];
    localSplitViewController.viewControllers = [NSArray arrayWithObjects:viewMaster2, localNavigationController, nil];
    [localControllersArray addObject:localSplitViewController];
    [viewMaster2 release];
    [viewDetail2 release];
    [localNavigationController release];
    [localSplitViewController release];

    //setup the third tab
   // ...

    //setup the fourth tab
    //...

    //set the UISplitViewControllers onto the tab bar
    tabBarController.viewControllers = localControllersArray;
    [localControllersArray release];

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

    //switch to the new root view controller
    [appDelegate.window setRootViewController:tabBarController];
    [tabBarController release];
}

关于iphone - 另一个 UISplitViewController + UITabBarController 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14473275/

相关文章:

ios - 我可以用 View 覆盖而不是隐藏状态栏吗?

iphone - Facebook SDK 登录对话框出现两次

iOS sdk NSArray 内的 NSArray 查找和合并

Objective C 中类似 Java 的接口(interface)

ios - 如何在注销期间取消所有 NSMutableURLRequest?

objective-c - UI滑出栏

swift - 标签栏的警报 View

ios - UITabBarController 选中项显示导航栏

iphone - uiTableView 在删除单元格时第二次崩溃

ios - 选项卡栏、 View Controller 和 Storyboard