pushViewController с tableViewController в viewController
Вопрос
У меня есть 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.