В моем приложении для 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", но приложение упало ...
Что я делаю не так?
[EDIT]
Сообщение об ошибке: 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», причина: «Приложение попыталось представить нулевой контроллер модального представления для цели.»
[/ EDIT]
[EDIT2]
Спасибо за вашу помощь!Да, navigationController - это ноль ... Я думаю, что я добавил UINavigationController неправильно ... Я поместил его в это окно, потому что не было возможности поместить его непосредственно в мое представление:
Как мнедобавить UINavigationController правильно?
[/ EDIT2]
PS: Почему я должен использовать IB?(Вы можете пропустить это ...)
Мне нужно фоновое изображение в моей 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» требуется фоновое изображение, но следующие push-представления не нужны.
К сожалению, невозможно установить свойство в категории или вызвать [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, это все очень раздражающие обстоятельства иошибки: - (