1

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

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

    [self.view addSubview:music.view];

    [music release];    
}

当你在视图中按下一个按钮时,想法是加载另一个 nib,MusicPick,它将作为子视图加载,选择一些东西然后回到这里。感谢任何帮助或新想法。

4

2 回答 2

3

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

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

于 2009-05-20T01:55:19.513 回答
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];   
}

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

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

于 2009-05-20T02:26:32.117 回答