Большое спасибо! Да, вы правы, навигационный контроллер равен нулю. Я добавляю [EDIT2] в мой вопрос ...
м iOS-приложении я хочу предоставить просмотр настроек. «presentModalViewController» работает очень хорошо:
ViewSettings *controller = [[ViewSettings alloc] initWithNibName:@"ViewSettings" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];
[self.navigationController presentModalViewController:navController animated:YES];
[controller release];
[navController release];
К сожалению, я должен изменить свой работающий код и создать ViewSettings, включая UINavigationController в Интерфейсном Разработчике. Почему? Длинная история, я объясню в конце этой темы ...
Я пытаюсь перетащить UINavigationController в мои ViewSettings и создать IBOutlet для доступа к нему в моем классе. Я отдаю этот контроллер "presentModalViewController", но приложение упало ...
Что я делаю не так?
[РЕДАКТИРОВАТЬ]
Сообщение об ошибке:GDB: Программа получила сигнал: «SIGABRT».
Ошибка происходит в последней строке этого кода:
ViewSettings *viewSettings = [[ViewSettings alloc] initWithNibName:@"ViewSettings" bundle:nil];
UINavigationController *navController = viewSettings.navigationController;
UINavigationBar *navBar = navController.navigationBar;
OwnNavigationBar *ownNavBar = (OwnNavigationBar *)navBar;
[ownNavBar drawHeaderImage:YES];
[self.navigationController presentModalViewController:navController animated:YES];
Подробная ошибка:Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «Приложение попыталось представить нулевой модальный контроллер представления на цели».
[/РЕДАКТИРОВАТЬ]
[EDIT2]
Спасибо за вашу помощь! Да, navigationController равен нулю ... Я думаю, что я добавил UINavigationController неправильно ... Я поместил его в это окно, потому что не было возможности поместить его непосредственно в мое представление:
Как правильно добавить UINavigationController?
[/ EDIT2]
Мне нужно фоновое изображение в моем UINavigationBar. Моя первая попытка была:
UIImage *image = [UIImage imageNamed: @"header.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[self.navigationController.navigationBar addSubview:imageView];
[self.navigationController.navigationBar sendSubviewToBack:imageView];
Но в некоторых выпусках заголовок под UIBarButton не виден! Я много пробовал, например устанавливает "тег" представления и sendSubviewToBack в каждом представлении, но безуспешно. Это очень раздражающая ошибка!
Моя вторая попытка состояла в том, чтобы создать категорию и переписать метод drawRect:
@implementation UINavigationBar(MyNavigationBar)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @"header.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
Но теперь у всех моих UINavigationBars есть фоновое изображение, и я не могу деактивировать его. Проблема в том, что для «ViewSettings» необходимо фоновое изображение, а для следующих заданных представлений нет.
К сожалению, невозможно установить свойство в категории или вызвать [super drawRect: rect], чтобы избежать рисования изображения.
Моя последняя попытка написать собственный UINavigationBar
@interface OwnNavigationBar : UINavigationBar {
BOOL _drawHeaderImage;
}
Теперь я могу управлять методом drawRect !! ЗДОРОВО!!
- (void)drawRect:(CGRect)rect {
if (_drawHeaderImage) {
UIImage *image = [UIImage imageNamed: @"header.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
else {
[super drawRect: rect];
}
}
Но я отмечаю рано ... :-( Невозможно установить собственную UINavigationBar в UINavigationController !!! "navigationBar" в UINavigationController - свойство только для чтения! AAAAHHHHHHHHHH!
У меня есть один последний шанс: в Интерфейсном Разработчике можно дать UINavigationController собственный UINavigationBar !! ДА! Я ПОНЯЛ!! :-)
Я настроил его в своем MainWindow_iPhone.xib, и он прекрасно работает! Теперь я должен реализовать это для моих ViewSettings, потому что это (модальное) представление нуждается в новом UINavigationController.
PS: Может быть, кто-то может отправить эту ветку в Apple, это все очень раздражающие обстоятельства и ошибки :-(