Вопрос

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

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

УИТаблевиевконтроллер


- (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 и вижу это.Поэтому я не понимаю, почему я не могу его нажать.

Есть идеи?

Это было полезно?

Решение

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 свойство возвращает ноль.

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top