Выдвижение UIViewController на UINavigationController - PullRequest
0 голосов
/ 03 января 2011

На днях я спросил об использовании UINavigationController в качестве дочернего элемента UIViewController .Я получил это работает через ответ.Теперь я пытаюсь вставить контроллер в стек навигации.При касании ячейки таблицы я делаю следующее:

- (void) showSetup {
    NSLog(@"Showing Setup");
    SetupViewController *controller = [[SetupViewController alloc]initWithNibName:@"SetupViewController" bundle:nil];
    self.setupViewController = controller;
    self.setupViewController.title = @"Setup";
    [self.navigationController pushViewController:self.setupViewController animated:YES];
    [controller release];
}

Я вижу инструкцию log в своей консоли, но представление никогда не меняется.Я что-то упустил?

Ответы [ 2 ]

1 голос
/ 04 января 2011

Хммм, ну, это немного сложно, не зная деталей вашей реализации - я предположил, что вы реализовали свой контроллер навигации, как в связанной статье.Кроме того, хотя вы не сообщаете подробностей, похоже, что вы добавили контроллер табличного представления где-то вдоль линии, поэтому я заставил UIViewController соответствовать протоколам UITableView для обработки всего в одном месте:

@interface SOViewController : UIViewController <<code>UITableViewDelegate,UITableViewDataSource > {

  UINavigationController* navController;
}

- (IBAction) pushMe:(id)sender;
@end

Я опустил кнопку в представлении SOViewController в IB и связал с ним действие pushMe :.Я также создал еще один класс на основе UIViewController под названием JunkController и удалил ярлык «Нежелательный» в его представлении в IB - это все, что я делал в IB.В viewDidLoad объекта SOViewController:

navController = [[[UINavigationController alloc] init] retain];
navController.navigationBar.barStyle = UIBarStyleBlackOpaque;
navController.toolbarHidden = YES;

UITableViewController* tvController = [[UITableViewController alloc] init];
UITableView* tv = [[UITableView alloc] init];
tvController.tableView = tv;
tv.delegate = self;
tv.dataSource = self;
[navController setViewControllers:[NSArray arrayWithObject:tvController]];

В реализации действия pushMe::

[self presentModalViewController:navController animated:YES];

Реализованы методы делегата tableView и источника данных;для выбора:

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath  { 
    NSLog(@"row selected");
    JunkController* junk = [[JunkController alloc] initWithNibName:@"junkcontroller" bundle:nil];
    [navController pushViewController:junk animated:YES];
    [junk release];
}

Это должно привести к появлению приложения, которое отображает экран с помощью кнопки «Нажми меня».Когда эта кнопка нажата, вы должны получить анимированное модальное навигационное табличное представление - у меня была одна строка с надписью «выберите меня».Прикосновение к этой строке должно оживить нежелательный контроллер.

0 голосов
/ 03 января 2011

Нет необходимости делать setupViewController объявленным свойством в этом контроллере представления. Кроме того, я могу ошибаться, но я думал, что «контроллер» - это зарезервированное имя в Какао, я бы изменил это имя. Поэтому убедитесь, что вы зарегистрировались в UITableViewDelegate и используете - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath, чтобы подключить и протолкнуть новый контроллер представления следующим образом:

SetupViewController *detailViewController = [[SetupViewController alloc] initWithNibName:@"SetupViewController" bundle:nil];
detailViewController.title = @"Setup";
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];

Гудлак!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...