2012-11-21 30 views
1

我有一個自定義類的多個實例需要從鍵盤輸入。你可以想到UITextField(但它們不是UITextField,它們是NSObject)。但是,他們都有一個屬性UIControl *control識別標籤按鈕被按下以移動到下一個響應者

這些對象被實例化並放入一個數組(訂單問題),並按照相同的順序放在屏幕上。

場景1:第一個對象的用戶標籤,它成爲第一個響應者。用戶點擊另一個對象(來自同一個班級),併成爲第一響應者。沒問題。

場景2:第一個對象的用戶標籤,它成爲第一個響應者。用戶點擊鍵盤上的TAB按鈕(iPad或iPhone或無線鍵盤),我希望陣列中的下一個對象成爲下一個響應者。 iOS隨機挑選[?或者某些邏輯不清楚]另一個與我想要的順序不同的對象。

問題:因爲這些對象是NSObject s,我如何攔截轉換到下一個對象。我嘗試使用標籤或跟蹤誰是第一響應者,但問題是,如果用戶不按順序敲擊對象,那很好 - 我不想攔截它。我只想攔截從一個對象到另一個對象的轉換只有在它是通過點擊鍵盤上的TAB(或NextReturn)按鈕。

有什麼想法?謝謝。

+0

爲什麼不把你的自定義類的屬性,它指向下一個對象它應該去(用一個弱引用),然後只是按下tab/return時將該對象作爲第一個響應者,如果沒有對象(如最後一個)沒有任何事情會發生,因爲它將發送到零的消息。我想你甚至可以使用界面生成器來設置這個自定義屬性。 (然後,我可能不會理解你的問題) – Pochi

+0

@LuisOscar謝謝。這是一個我沒有想到的選項,但仍然存在障礙:1)我最大的問題是當鍵盤上的TAB按鈕被按下時,我什麼也沒有得到。我怎麼弄到的? iOS路由輸入到其他地方,而不是我的對象。 2)我寧願這些東西也不瞭解彼此 - 即使參考資料太少。儘管如果我發現這是唯一的選擇,我可以忽略這一點。 – Canopus

+0

您是否在使用界面構建器?你說他們不是uitextfield,但他們必須是,或者你必須有一個uitextfield在某處顯示鍵盤(也許是他們的一個子類)你指定他們是什麼? (像你的自定義子類可能有一個uitextfield,那麼這個是成爲第一響應者)關於返回,虐待粘貼代碼作爲答案因爲它看起來很有趣這裏 – Pochi

回答

1

您可以設置自定義類有這樣的事情

@interface testClassButtonSub : UIButton 

@property (weak,nonatomic) IBOutlet UIButton *nextButton; 

@end 

那麼你甚至可以使用接口生成器來設置,這將是在採取某種行動的下一個響應者。 (用戶在自定義類中的文本框內時按下回車鍵)

對於返回,您必須將viewcontroller聲明爲特定textview的委託。

首先你設置視圖 - 控制頭是這樣的:

@interface RegisterViewController : UIViewController <UITextFieldDelegate> 

,那麼你在執行

// Set Delegates of the Text Fields 
eMail.delegate = self; 
userPassword.delegate = self; 
userNickname.delegate = self; 

設定的代表和您使用此委託方法跳轉到下一個對象

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{  
    // Jumping code here 
    return NO; 
} 

HOWEVER in你的情況你的文本字段必須是你的對象裏面,所以你必須讓該對象的委託,並在該對象的實現跳躍代碼添加

[thisObjectsTextfield becomeFirstResponder]; 
+0

感謝您的回答,但沒有UITextField。該類符合UIKeyInput協議。我在 - (void)insertText中找到了我的答案:(NSString *)文本是UIKeyInput協議所需的方法。現在我需要想出一個設計來傳達這一點。 – Canopus

+1

試試這個http://stackoverflow.com/questions/9592593/how-do-i-detect-the-return-key-being-pressed-and-respond-to-it-using-the-uikeyin – Pochi