2014-09-18 34 views
0

在view.h我聲明IOS通UIbuton到方法作爲參考

@property (retain, strong) UIButton *btn; 

在view.m予先有:

@synthesize btn; 

,然後在執行我在這呼叫的方法其他類:

[self.view addSubview:[otherclass getTestBtn:btn]]; 

這一行後,在我的view.m,我嘗試登錄該文本在這樣的按鈕:

NSLog(@"btn.titleLabel.text = %@", btn.titleLabel.text); 

不幸的是,日誌說:

btn.titleLabel.text = (null) 

在其他class.m我實現的方法是這樣的:

btn    = [[UIButton alloc] initWithFrame:CGRectMake(70, 340, 100, 25)]; 
[btn setTitle:@"HELLO" forState:UIControlStateNormal]; 
return btn; 

在模擬器我看到按鈕顯示文本「你好」。但從view.m來看,按鈕中的文本似乎無法訪問。爲什麼? 我很害怕從view.m傳遞給其他class.m的按鈕沒有通過引用傳遞。因此view.m中的按鈕不受其他類中的方法的影響。這是原因嗎?如果是:如何通過按鈕作爲參考?我用&字符嘗試過。但編輯顯示錯誤。

+0

更改聲明:'@property(nonatomic,strong)UIButton * btn;' – 2014-09-18 20:04:13

+0

它仍然在調試區域顯示NULL。 – user3355182 2014-09-18 20:11:53

+0

請提供更完整的代碼示例。您現有的示例引用了'btn2',我們可以看到它沒有定義。如果沒有準確的看法,我們無法幫助您。 – Jonah 2014-09-18 20:16:04

回答

0

如果你想獲得該按鈕從其他類返回,那麼你需要將其分配給你的財產 -

self.btn = [otherClass getTestBtn]; 
[self.view addSubView:self.btn]; 

此外,你應該strong而不是retain爲@dimimpou說,你不要除非要使用特定的備份變量名稱,否則還需要@synthesize

+0

是的,我猜這是最簡單的方法。事情是,我實際上從view.m請求otherclass.m另一個視圖*,其中包含按鈕*。所以現在不太可行。我需要改變代碼的設計。我希望其他班級照顧所有圖形元素,並讓view.m處理按鈕上的點擊等。 – user3355182 2014-09-18 20:16:59

+0

聽起來好像你想要一個委託模式,使用'view.m'充當'otherclass中的對象的委託'。但是你的問題中的代碼不會將任何內容分配給'btn'屬性,這就是爲什麼它是零。 – Paulw11 2014-09-18 20:19:59

+0

是否將view.m作爲委託給其他類中的方法傳遞的? – user3355182 2014-09-18 20:21:57