![](/img/trans.png)
[英]Changing the Title View of a UINavigationController UIViewController in Interface Builder
[英]How to create an UIViewController with UINavigationController with Interface Builder?
在我的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,包括Interface Builder中的UINavigationController。 為什么? 長話故事,我會在這篇帖子的最后解釋一下......
我嘗試在我的ViewSettings中拖放UINavigationController並創建一個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'而終止應用程序,原因:'應用程序試圖在目標上顯示一個nil模態視圖控制器。
[/編輯]
[EDIT2]
謝謝你的幫助! 是的,navigationController是nil ...我想我以錯誤的方式添加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,但沒有成功。 這是一個非常討厭的bug!
我的第二次嘗試是創建一個類別並覆蓋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];
}
}
但我很早就慶祝...... :-(在UINavigationController中設置自己的UINavigationBar是不可能的!UINavigationController中的“navigationBar”是一個只讀屬性!AAAAHHHHHHHHHH!
我有最后一次機會:在Interface Builder中,可以為UINavigationController提供一個自己的UINavigationBar! 是! 我知道了!! :-)
我在我的MainWindow_iPhone.xib中配置它,效果很好! 現在,我必須為我的ViewSettings實現這個,因為這個(模態)視圖需要一個新的UINavigationController。
PS:也許,有人可以將此線程發送給Apple,這一切都非常煩人的情況和錯誤:-(
如果你要顯示你的nib文件的內容會很有幫助,因為我懷疑viewSettings.navigationController
是nil。 navigationController
是所有UIViewControllers
的屬性,它為您提供父導航視圖控制器(如果存在)。 聽起來你從未將viewSettings
視圖控制器添加到導航控制器的視圖控制器堆棧中。
從nib初始化視圖控制器時,它實際上並不會立即加載nib,因此viewSettings.navigationController
仍為零。 第一次引用view
屬性時,將加載nib。
更新
您可以自己加載筆尖並抓住導航控制器,如下所示:
UINavigationController *navController = [[[NSBundle mainBundle] loadNibNamed:@"ViewSettings" owner:self options:nil] objectAtIndex:1];
我在索引1使用了對象,因為在你的截圖中有一個tableview,我認為它將是索引0。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.