-didSelectRowAtIndexPath не работает для меня. iPhone SDK 3 - PullRequest
1 голос
/ 16 декабря 2009

Привет всем. Я пытаюсь включить простой UINavigationController в мое приложение панели вкладок. Я установил TabBar в качестве корневого контроллера, и все, кажется, работает нормально. Этот метод вызывается правильно и не прерывается, но не изменяется в моем подробном представлении. Я полностью потерян на этом.

Я следовал инструкциям из этого видео: http://www.youtube.com/watch?v=LBnPfAtswgw&feature=player_embedded#. Я изменил некоторые вещи, чтобы заставить его работать с тем, что я пытаюсь выполнить, но основная логика я оставил прежней. Она работает с SDK 2. *, а я использую 3. *. Я предполагаю, что это как-то связано с этим. Может кто-нибудь мне помочь? Вот как выглядит мой didSelectRowAtIndexPath:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Navigation logic may go here. Create and push another view controller.
 NSInteger row = [indexPath row];
 if(self.detailViewController == nil) {
  LogEntryDetailViewController *logEntryDetail = [[LogEntryDetailViewController alloc]
              initWithNibName:@"LogEntryDetailView" bundle:[NSBundle mainBundle]];
  self.detailViewController = logEntryDetail;
  [logEntryDetail release];
 }

 detailViewController.title = [NSString stringWithFormat:@"%@", [logEntriesArray objectAtIndex:row]];

 ProgNameAppDelegate *delegate = (ProgNameAppDelegate *)[[UIApplication sharedApplication] delegate];
 [delegate.logViewNavController pushViewController:self.detailViewController animated:YES];
}

Я схожу с ума здесь. Если мне нужно будет опубликовать это где-то еще, я буду счастлив сделать это. Заранее спасибо!

1 Ответ

1 голос
/ 16 декабря 2009

Вы должны изменить эти строки:

ProgNameAppDelegate *delegate = (ProgNameAppDelegate *)[[UIApplication sharedApplication] delegate];
[delegate.logViewNavController pushViewController:self.detailViewController animated:YES];

с этим:

[self.navigationController pushViewController:detailViewController animated:YES];

Если у вас есть контроллер панели вкладок, как вы говорите, то нажатие detailViewController на delegate.logViewNavController, вероятно, является неправильным (в зависимости от того, что означает delegate.logViewNavController, но так ты моя ставка, вот где твоя путаница).

Как правило, вам не нужно усложнять свой код доступом к делегату приложения, чтобы получить подобный контроллер. Все, что вам нужно сделать, это нажать ваш новый контроллер на self.navigationController в большинстве практических случаев.

...