UITableViewController не помещает представления в стек

У меня есть UITableViewController, в заголовке которого есть UISearchbar. Когда пользователь ищет, мой UITableView заполняется результатами. Я хочу поместить новый контроллер представления в стек, когда пользователь выбирает результат.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    if (cell.accessoryType == UITableViewCellAccessoryNone) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;

        WatchlistSheetView* watchlistSheetView = [[WatchlistSheetView alloc] initWithNibName:@"WatchlistSheetView" bundle:nil];
        watchlistSheetView.symbol = cell.textLabel.text;
        [self.navigationController pushViewController:watchlistSheetView animated:YES];
        [watchlistSheetView release];

        //[self dismissModalViewControllerAnimated:YES];
    }     
}

Следующее не помещает контроллер представления в стек. Ничего не произошло. Как я могу решить?


person Sheehan Alam    schedule 08.08.2011    source источник
comment
Не могли бы вы подтвердить, что watchlistSheetView не равен нулю после этого вызова и что self.navigationController не равен нулю? В целом этот код выглядит нормально.   -  person Nikita Leonov    schedule 09.08.2011


Ответы (2)


Я предполагаю, что self.navigationController равно нулю, так что сообщение pushViewController никуда не отправляется.

Чтобы исправить это, вы можете создать UINavigationController в своем application:didFinishLaunching и передать ему свой контроллер табличного представления в качестве его корневого контроллера, следующим образом:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    UINavigationController* navigation = [[UINavigationController alloc] init];

   ....
   [navigation pushViewController:yourTableViewController animated:NO];
   ...
   [window addSubview:[navigation view]];
   [self.window makeKeyAndVisible];
}

или вы можете использовать initWithRootController для инициализации контроллера представления навигации с помощью контроллера табличного представления.

person sergio    schedule 08.08.2011
comment
Этот UITableViewController представлен модально. Означает ли это, что у меня нет UINavigationController? Где я могу настроить это? - person Sheehan Alam; 09.08.2011
comment
код в моем ответе объясняет, что вы должны сделать, чтобы настроить навигационный контроллер. Если вы не создали навигационный контроллер, ни по коду, ни в ИБ, то его у вас нет и вам нужно его создать. Лучше всего создать его в application:didFinishLaunchingWithOptions, как я показал в своем ответе. Если вам нужно, чтобы ваш пользовательский интерфейс был модальным, вы могли бы представить навигационный контроллер модально, но сначала я бы сделал это обычным способом. - person sergio; 09.08.2011
comment
У меня есть навигационный контроллер. Мое приложение представляет собой приложение UITabBarController, которое содержит UINavigationControllers для каждой вкладки. Одна из вкладок модально запускает другой UITableView. Вот где у меня проблема. Может быть, мне нужно получить панель навигации parentViewController? - person Sheehan Alam; 09.08.2011
comment
вам нужен навигационный контроллер внутри модального представления? это также возможно... также вы можете нажать новое представление на родителя модального контроллера, но я не уверен в результатах, если вы сделаете это, пока отображается модальное окно... - person sergio; 09.08.2011

Похоже, вы вызываете себя, когда ссылаетесь на свой навигационный контроллер. Вы действительно выделили навигационный контроллер и назначили его себе?

person Dylan Reich    schedule 08.08.2011