pushViewController с tableViewController в viewController - PullRequest
2 голосов
/ 10 февраля 2010

У меня есть UIViewController, этот контроллер содержится в navigationController. Я добавляю UITableViewController в этот viewController. Я хотел бы вызвать метод pushViewController, когда я нажимаю на ячейку моего tableView.

Я пробовал это:

UITableViewController


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{   
  FirstView *myViewController = [[FirstView alloc] init];
  [f myViewController];
}

UIViewController (FirstView)


-(void)pushIt
{
    SecondView *sCont = [[SecondView alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]];
    [self.navigationController pushViewController:sCont animated:YES];
    NSLog(@"didSelect"); // is printed
    [sCont release];
    sCont = nil;
}

Но ничего не случилось. Я поместил NSLog () в свой метод pushIt, и я вижу его. Поэтому я не понимаю, почему я не могу толкнуть его.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 10 февраля 2010

UIViewController имеет свойство с именем navigationController, которое будет возвращать UINavigationController, если оно существует для контроллера представления, из которого он вызван.

Используя это свойство, вы можете помещать контроллеры представления в стек навигации из метода didSelectRowAtIndexPath: представления таблицы.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    SecondView *sCont = [[SecondView alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]];
    [self.navigationController pushViewController:sCont animated:YES];
    [sCont release];
}

Причина, по которой ваш текущий код не работает, возможно, из-за следующего:

  • У вас уже есть экземпляр FirstViewController, так как вы сказали, что добавили табличное представление в качестве его подпредставления
  • Вы пытаетесь создать новый экземпляр FirstViewController, когда пользователь касается ячейки, которой нет в стеке навигации, поэтому попытка поместить контроллер представления в стек оттуда не работает, потому что navigationController свойство возвращает ноль.
0 голосов
/ 10 февраля 2010

Вы выделяете и запускаете myViewController, но никогда не помещаете его в навигацию, окно или что-то еще, затем вы помещаете sCont в myViewController, которого нет в окне.Во-первых, попробуйте не использовать myViewController, затем попробуйте переместить myViewController к навигации, прежде чем вставлять в него sCont.

...