【问题标题】:How can I load a NIB that isn't a view in a UITabViewController?如何在 UITabViewController 中加载不是视图的 NIB?
【发布时间】:2025-12-08 13:55:02
【问题描述】:

我想在 UITabViewController 中加载一个不是视图的 nib。这是我现在拥有的,但它不起作用,但它应该让您了解我想要什么:

- (IBAction)PlaylistButtonPressed:(id)sender
{
    MusicPick *music = [[MusicPick alloc] initWithNibName:@"MusicPick" bundle:nil];

    [self.view addSubview:music.view];

    [music release];    
}

当您在视图中按下按钮时,想法是加载另一个 nib,MusicPick,它将作为子视图加载,选择一些内容并立即返回此处。任何帮助或新想法都将不胜感激。

【问题讨论】:

    标签: iphone cocoa-touch uitabbarcontroller nib


    【解决方案1】:

    添加更多细节。

    您可以通过使用 addSubView 或将控制器推送到 UITabBarController 的视图来将视图添加到现有 UIViewController 的视图。在后一种情况下,UITabBarController 必须是 [曾经是] 带有 RootViewController 的 UINavigationController。

    我怀疑,这就是你的意思。因此,您将执行以下操作。

    - (IBAction)PlaylistButtonPressed:(id)sender
    {
        // Load UIViewController from nib
        MusicPick *music = [[MusicPick alloc] initWithNibName:@"MusicPick" bundle:nil];
    
        // Add to UINavigationController's stack, i.e. the view for this UITabBarController view
        [self.navController pushViewController:music animated:YES];
    
        // Release music, no longer needed since it is retained by the navController
        [music release];   
    }
    

    这假设您在 UITabBarController 中有一个 UINavigationController 作为视图,它被称为 navController。

    如果您只是想在 UITabBarController 中的 UIViewController 的视图中添加一个 UIView(例如叠加层),那么您可以使用 addSubView ,因为您已经想通了,不需要 UINavigation Controller。

    【讨论】:

      【解决方案2】:

      您不能将子视图直接添加到UITabBarController。其中一个控制器的工作方式是存储UIViewControllers 的列表并在选项卡中显示其中的每一个。但就其本身而言,它们并不是真正的子视图。除了更新此列表之外,您不会真正修改标签栏控制器本身。

      由于您似乎想要做的是呈现一个临时视图以允许用户选择一些会影响选项卡栏控制器中某些内容的选项,我建议您从您的笔尖将该视图呈现为模态视图 选项卡式视图。看看UIViewControllerpresentModalViewController:animated:dismissModalViewControllerAnimated: 方法。假设MusicPickUIViewController 的子类,只需在分配后将其传递给此方法(如您在上面的第一行代码中所做的那样),其余部分由 UIKit 处理。当您完成从其中提取选定的值或用户输入的数据时,请记住释放该 MusicPick 实例。

      【讨论】: