2013-04-25 40 views
1

我有一個UINavigationController類,我想在一個按鈕添加與方法addSubview但它不工作的UINavigationController addSubview

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
     UIButton *testbtn = [[UIButton alloc] initWithFrame:CGRectMake(20, 90,28,20)]; 
     [self.view addSubview:testbtn]; 
    } 
    return self; 
} 
+0

你怎麼稱呼這個類?你確定這種方法被解僱嗎?在調用這個類之前,你確定調用了'alloc initWithNibName:'嗎? – 2013-04-25 15:54:06

+0

更重要的是,你試圖實現什麼功能?這個按鈕在哪裏,它的功能是什麼?對我而言,這將決定代碼的存在位置和/或允許我們建議更好的方法來實現您要實現的功能。 – vinnybad 2013-04-25 15:56:51

回答

2

我不相信你可以添加一個按鈕到UINavigationController - 它不」實際上有自己的看法。 UINavigationController更像是一個幕後組織者,用於持有和展示其他UIViewController

您需要帶上您的[self.view addSubview:testbtn],並將其放入UIViewController的代碼中,而不是代碼中的UINavigationViewController。正如David Doyle在他的回答中指出的那樣,在viewDidLoad而不是initWithNibName中放置類似的東西被認爲是更好的做法。

0

如果你想修改視圖控制器的看法,它不是一個好主意,做所以在init方法中。提取創建視圖控制器視圖的資源的nib文件需要一小段時間才能完成。

你最好不要修改視圖控制器的視圖通過重寫方法 - [UIViewController的viewDidLoad中]像這樣:

- (void)viewDidLoad 
{ 
    UIButton *testbtn = [[UIButton alloc] initWithFrame:CGRectMake(20, 90,28,20)]; 
    [self.view addSubview:testbtn]; 
} 
+0

什麼也沒有改變,即使在viewDidLoad,我的班級是 @ DetailImagesViewController接口UINavigationController 我覺得addSubview不工作 – 2013-04-25 16:02:26

1

我認爲,因爲您正在嘗試在導航控制器上執行此操作,所以您需要工具欄上的酒吧按鈕項。你需要做這在的UIViewController,而不是UINavigationController的:

UIBarButtonItem * doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
                  style:UIBarButtonSystemItemDone 
                  target:self 
                  action:@selector(buttonPressed:)]; 
[self.navigationItem setRightBarButtonItem:doneButton]; 

此外,你應該抓住一杯咖啡,並通過UINavigationController class reference的「概述」部分閱讀。這將需要大約10分鐘,你會很高興你做到了。

如果我錯了,你確實想要一個UIButton(而不是UIBarButtonItem),你還需要在UIViewController子類中這樣做。另外,你應該使用它的工廠方法,而不是典型的alloc/init:

UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
btn.frame = CGRectMake(20, 90,28,20)