2009-06-03 69 views
1

我想向我的應用添加信息按鈕以提供自定義幫助。iPhone SDK 2:以編程方式添加信息按鈕

不是將按鈕添加到筆尖並將事件(touchUpInside)鏈接到控制器,而是決定以編程方式添加按鈕。按鈕顯示。當我添加觸摸按鈕時要執行的目標事件處理程序時,它不起作用。我的方法(doHelp)在觸摸按鈕時沒有被調用。

當我調試它時,事件沒有註冊到按鈕!雖然代碼不會拋出任何異常。

這裏是代碼片段從視圖:

// Create a Button to get Help  
    UIButton *helpButton = [UIButton buttonWithType:UIButtonTypeInfoDark ] ; 
    buttonRect = helpButton.frame; 

    // CALCulate the bottom right corner 
    buttonRect.origin.x = rect.size.width - buttonRect.size.width - 8; 
    buttonRect.origin.y = rect.size.height - buttonRect.size.height - 8; 
    [helpButton setFrame:buttonRect]; 

    [helpButton addTarget:self action:@selector(doHelp:) forControlEvents:UIControlEventTouchUpInside]; 
    [helpButton setEnabled:TRUE]; 
    [self addSubview:helpButton]; 

........

// Another METHOD ELSEWHERE in the VIEW object 
-(void)doHelp:(id)Sender 
{ 
    [self setHelpNeeded:TRUE]; 
    [self setNeedsDisplay]; 
} 

什麼我做錯了嗎? 我已經看了SDK的幫助和樣品,我真的很笨拙! 我希望另一雙眼睛會幫助! :-)

這段代碼片段在View對象中,以防您需要知道。 我剛添加了doHelp來幫助第2個響應者...謝謝。

**更新09年6月4日** - 我一直在嘗試整夜,沒有任何工作。我認爲我設置方法選擇器的方式有問題,因爲我的方法永遠不會被調用。其他一切都很好。即使使用NIB文件也不起作用。我已經標記了按鈕,檢索它並添加了方法選擇器,但無濟於事。有什麼基本的,我做錯了...啊! 任何想法,任何人?

+0

由於沒有工作到目前爲止...我將恢復到基於NIB的方式。 基本上創建一個視圖+控制器組合,並從那裏去,這工作。 – 2009-06-04 03:49:10

+0

說得太快......它沒有工作。 :-(。這讓我感到很開心! 我寫了一個小應用程序來測試基礎知識,它在其中起作用,所以這與我設置控制器的方式有關......我要去再次發佈這個問題的附加信息,看看是否有人有任何想法如何做到這一點。 – 2009-06-05 18:43:47

回答

4

終於解決了!並學會了一些回報。花了我幾天的時間才弄清楚這一點。

的原因,我的UIButton對象沒有工作是因爲我發現,在一個UIImageView對象的情況下:

「initWithImage:此方法調整接收器的框架以匹配指定的圖像大小也在默認情況下禁用圖像視圖的用戶交互。「

而我的UIButton已被指定爲UIImageView控件的子視圖!

沒有錯誤/警告。它只是安靜地被禁用。

:創建一個容器的UIView對象,其現在包含的UIImageView和按鈕,以使按鈕顯示爲覆蓋在所述圖像,但它實際上是圖像的兄弟和虛設容器的UIView的子視圖。

+0

司長, ks發佈這麼多...雖然解決方案可以是這樣的或啓用UIImageView的用戶交互,很容易忘記這一點。當我發現你的帖子時,我自己感到困惑......謝謝! 溫馨的問候, Abhinav – Abhinav 2010-03-09 20:42:49

1

它已經一段時間,但我覺得你的addTarget需要採取包含doHelp對象:選擇,就像這樣:

[helpButton addTarget:self action:@selector(doHelp:)]; 

在同一視圖的地方假設你有:

- (void)doHelp: { } 

將nil傳遞給addTarget意味着您將該選擇器發送給沒有收件人。

+0

我的壞...在我的代碼中我有自己的目標。它仍然無法正常工作。我只是試着零如果在目標中指定了nil,它會向響應者鏈發送操作 – 2009-06-04 00:04:55

+0

我的目標方法是

 -(void)doHelp:(id)Sender { \t [self setHelpNeeded:TRUE]; \t [self setNeedsDisplay]; } 
方法簽名有什麼問題嗎? – 2009-06-04 00:05:39

0

問題在於你的addTarget:nil那裏。您爲其採取行動的選擇器只是它將發送給其目標的消息。你沒有給它一個目標,所以它不知道如何處理這個消息。你可能想要通過self而不是nil那裏。

+0

UR正確。甚至發送Self作爲目標不行。:-( – 2009-06-04 00:06:17

0

我偶然發現了這個問題,同時用Google解決了同樣的問題。至少在3.x SDK中,你所要做的就是將UIImageView的UserInteractionEnabled屬性設置爲YES。

感謝您發佈有關該問題的發現,我甚至不會想到看那個。

0

我也有類似的問題,即按鈕則認爲外界並沒有得到自來水消息

什麼幫助是設置父視圖的背景顏色,一看就知道按鈕在它之外:

... 
[buttonParentView addSubview: myButton]; 
buttonParentView.backgroundColor = [UIColor cyanColor]; 
相關問題