Контроллеры и представления не загружаются одновременно.Это означает, что когда вы создаете экземпляр объекта DetailViewController в вашем случае, представления не отображаются (и если вы используете Nib), это является частью концепции отложенной загрузки.
Таким образом, когда вы в первый раз отправляете сообщение setEnabled = NO, объект будет иметь нулевое значение (отправка сообщений объектам с нулевым разрешением разрешена в Задаче C).
Пример:
[nextController setEnabled:NO]
равно [nil setEnabled:NO]
, и это, безусловно, не то, что вы хотите.
В следующий раз, если не будут выгружены предупреждение о памяти и представления, представления будут в памяти и ссылка накнопка больше не будет иметь значение ноль, поэтому при втором вызове она будет работать.
И добавьте строку кода над pushViewController:animate
Если вы хотите, чтобы кнопка была инициализирована какотключить, вы можете поместить этот код в viewDidLoad / viewWillAppear в зависимости от контекста вашего приложения.
Это только одно возможное решение.
Отредактированный ответ на запрос в комментарии:
В вашем методе инициализатора в DetailviewController добавьте это:
self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(backToRoot)] autorelease];
- (void)backToRoot {
[self.navigationController popToRootViewControllerAnimated:YES];
}
, а также добавьте подпись метода в ваш заголовочный файл.
Ссылка на UINavigationController: http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html