#iphone #objective-c #uiviewcontroller #push
#iPhone #objective-c #uiviewcontroller #толкать
Вопрос:
у меня есть приложение, в котором a есть корневой контроллер представления, который выводит на экран другой контроллер представления. этот контроллер просмотра показывает таблицу. когда выбрана ячейка, она переходит к другому контроллеру просмотра. Первый push работает, а второй — нет. Вот мой код для выбора ячейки в таблице:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
TwoViewController *two = [[TwoViewController alloc] initWithNibName:@"TwoViewController": bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:two animated:YES];
[two release];
Есть идеи, что я сделал не так? коды, которые я использовал для обоих нажатий, почти идентичны…
Я пробовал это, поместив этот код также в событие touchUpInside для UIButton, но это не работает.
Я предполагаю, что нет NavigationController для отправки представления, но я не знаю.
Пожалуйста, помогите!
Комментарии:
1. Можете ли вы опубликовать код, который вы используете для запуска первого контроллера просмотра?
Ответ №1:
Вы изменили метод -initWithNibName:bundle в TwoViewController? Я предполагаю, что он неправильно инициализируется (т. Е. Метод неправильно инициализирует суперкласс).
Редактировать: Я думаю, что нашел ошибку, на самом деле это довольно очевидно.
Пожалуйста, проверьте этот опубликованный вами код:
initWithNibName:@"TwoViewController": bundle:[NSBundle mainBundle]];
Ошибка находится рядом со @"TwoViewController":
строкой, лишняя точка с запятой, которой там быть не должно, измените ее на:
initWithNibName:@"TwoViewController" bundle:[NSBundle mainBundle]];
Ответ №2:
Регистрируйте как ‘two’, так и self.NavigationController,
NSLog(@"two = %@", two);
NSLog(@"self.navigationController = %@", self.navigationController);
Сначала вы узнаете, равен ли один из них нулю (или оба) и вызывается ли TableView:didSelectRowAtIndexPath: вообще.
Комментарии:
1. Вызывается TableView:didSelectRowAtIndexPath: я попробовал NSLog (@»вызывается метод») перед завершением метода и получил сообщение.
2. Но NSLog(@»self.NavigationController = %@», self.NavigationController); выдает результат ‘null’. два контроллера просмотра дали этот результат. означает ли это, что оба равны нулю? как я могу это решить? два = <TwoViewController: 0x4e21f70>
3. Выполняете ли вы какую-либо специальную инициализацию в
TwoViewController
или что-нибудь странное вviewDidLoad
?self.navigationController
не должно быть нулевым.
Ответ №3:
Проблема с контроллером навигации.Проверьте это должным образом
Ответ №4:
Если новый контроллер представления является частью представления, у него, вероятно, нет контроллера навигации. Перед нажатием проверьте, равен ли нулю навигационный контроллер.
Комментарии:
1. Что вам следует сделать, так это предоставить NavigationController ViewController, который создает view в качестве параметра для view, чтобы view мог использовать NavigationController родительского ViewController.
2. Вам не обязательно это делать.
self.navigationController
Свойство будет установлено автоматически, когда вы нажмете на новый контроллер просмотра.3. @kubi: Его subview не знает о своем NavigationController, поэтому он должен предоставить NavigationController в качестве свойства (assign) или любым другим способом, чтобы иметь возможность запускать ViewController (или он должен вызвать его в своем классе ‘superview’, но это был бы менее безопасный подход, не всегда можно быть уверенным, что superview является подклассом UIViewController).
4. Он сказал, что его класс является подклассом
UIViewController
, который был помещен в стек навигации. По умолчанию должно быть установлено свойство NavigationController, поэтому он, должно быть, где-то что-то перепутал.5. Ах да, я думаю, я неправильно прочитал, я думал, что читал, что он создал подкласс UIView. В таком случае немного непонятно, почему NavigationController равен нулю.