Как я могу загрузить NIB, который не является представлением в UITabViewController? - PullRequest
1 голос
/ 20 мая 2009

Я хочу загрузить перо, которое не является представлением в UITabViewController. Вот то, что у меня есть сейчас, и оно не работает, но оно должно дать вам представление о том, чего я хочу:

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

    [self.view addSubview:music.view];

    [music release];    
}

Когда вы нажимаете кнопку в представлении, идея состоит в том, чтобы загрузить другой наконечник, MusicPick, который будет загружаться как подпредставление, выбрать что-то и вернуться обратно сюда. Любая помощь приветствуется или новые идеи.

Ответы [ 2 ]

3 голосов
/ 20 мая 2009

Вы не можете добавить подпредставление напрямую к UITabBarController. Один из этих контроллеров работает, сохраняя список UIViewController с и отображая каждый из них на вкладке. Но они на самом деле не являются подпредставлениями. Вы действительно никогда не модифицируете сам контроллер панели вкладок, кроме как для обновления этого списка.

Поскольку вы, похоже, хотите сделать это представить временное представление, позволяющее пользователю выбирать некоторые параметры, которые будут влиять на что-либо в контроллере панели вкладок, я бы посоветовал вам представить это представление из пера в качестве модального представления более просмотров с вкладками. Взгляните на методы UIViewController presentModalViewController:animated: и dismissModalViewControllerAnimated:. Предполагая, что MusicPick является подклассом UIViewController, просто передайте его этому методу после того, как он был выделен (как вы делали это в первой строке кода выше), а UIKit позаботится обо всем остальном. Не забудьте освободить этот экземпляр MusicPick, когда закончите извлекать из него выбранные значения или введенные пользователем данные.

1 голос
/ 20 мая 2009

Чтобы добавить немного больше деталей.

Вы можете добавить представление к существующему представлению UIViewController, используя addSubView или нажав контроллер на представлении UITabBarController. В последнем случае UITabBarController должен быть [был] UINavigationController с RootViewController.

Я подозреваю, это то, что вы имеете в виду. Поэтому вы бы сделали что-то вроде следующего.

- (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.

Если вы просто хотите добавить UIView в представление UIViewController в UITabBarController (например, наложение), то вы можете просто использовать addSubView, как вы уже выяснили, контроллер UINavigation не нужен.

...