2008-11-21 113 views
16

我試圖在運行時添加UIButton,但它不可見。我究竟做錯了什麼?如何在運行時添加UIButton

- (id)initWithFrame:(CGRect)frame { 
    if (self = [super initWithFrame:frame]) { 
     UIButton *btn = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 
     btn.frame = CGRectMake(0, 0, 100, 25); 
     btn.backgroundColor = [UIColor clearColor]; 
     [btn setTitle:@"Play" forState:UIControlStateNormal]; 
     [btn addTarget:self action:@selector(buttonClick:) 
     forControlEvents:UIControlEventTouchUpInside]; 
     btn.center = self.center; 
     [self addSubview:btn]; 
    } 
    return self; 
} 
+3

此代碼將泄漏;你保留了你的btn對象,但是從未釋放它。第一個保留消息是不必要的。 – 2008-11-21 11:56:32

+0

我已將UIButton視圖添加到viewDidLoad的子視圖而不是某些init方法,取得了很好的效果。 – 2009-10-30 09:09:55

+0

我也面臨同樣的問題。實際問題是什麼? – iOS 2012-12-05 06:15:17

回答

9

首先,確保調用了initWithFrame:方法。如果您的視圖位於Nib中,則會調用initWithCoder:。其次,按鈕是唯一的子視圖(從你的代碼看起來是這樣,但你永遠不知道)。該按鈕可能隱藏在另一個子視圖的後面。調用bringSubviewToFront:如果你需要。

最後,視圖本身是否可見?顯示按鈕足夠大嗎?以您的示例爲例,如果視圖寬度小於100像素,則該按鈕將不會顯示,因爲它會被視圖的邊界限制。

+0

那麼,什麼解決了它?這是三種可能性......你可以發佈DID工作的代碼嗎? – 2012-04-16 18:47:37

0

如果仍然不行,請嘗試刪除:在選擇名字的末尾:@selector(buttonClick)

1

必須釋放btn並刪除 「:」 在buttonClick

UIButton *btn= [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 
btn.frame = CGRectMake(0, 0, 100, 25); 
btn.backgroundColor = [UIColor clearColor]; 
[btn setTitle:@"Play" forState:UIControlStateNormal]; 
[btn addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:btn]; 
[btn release]; 
0

您不需要保留UIButton,因爲它由[self.view addSubview:btn]保留;

0

首先檢查您的代碼是否正在執行initwithFrame方法。 因爲如果你使用的是

NSArray *xibviews = [[NSBundle mainBundle] loadNibNamed: @"MySubview" owner: mySubview options: NULL]; 
MySubview *msView = [xibviews objectAtIndex: 0]; 
[self.view addSubview:msView]; 

然後initWithFrame部分將不會加載從筆尖即認爲executing.So請檢查一次。