2011-11-15 47 views
2

一個UIPicker我有代碼的工作非常漂亮,使用UITextField對象的inputView表現出UITextField對象(在UITableViewCell)上的選擇器時。這將停止顯示鍵盤,但不會阻止某人直接在該字段中輸入內容。防止直接輸入到的UITextField使用inputView顯示在iPhone上

爲了公平起見,他們只能粘貼某些東西,但即使如此,如果您不想在該字段中使用自定義值,也不應該允許這樣做。

有沒有辦法將文本輸入關閉?我已經試過:

return NO; 
textFieldShouldBeginEditing()委託方法

但這隻能起到防止場在所有的工作 - 所以沒有選擇器出現。

有沒有其他的方法來防止這種行爲?

在此先感謝。

回答

3

可以使用UITextFieldDelegate方法

-(BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string 

這被稱爲是一些試圖在你的文本字段更改文本的任何時間。你可以做一個簡單的檢查,確定string的值是你期望的值(來自你的選擇器視圖的東西),否則丟棄它。如果string的值是你想要的,則返回YES,否則返回NO

+0

謝謝 - 這確實有效。它不會停止可用的剪切/複製/選擇命令或光標出現在字段中,但它確實阻止了任何正在更改的內容。由於文本值可以在textFieldDidEndEditing委託方法中更改,因此不需要進行字符串比較。 – user1048028

1

如何使用另一個離屏的UITextfield? uipicker然後是屏幕外文本字段的輸入視圖。在日期選取器更改的處理程序中,指定原始文本字段的文本屬性進行更新。點擊原始文本框以啓動選取器可以通過以下幾種方式之一進行處理: 1.文本框始終設置爲userInteractionEnabled = NO,並且在其上有一個不可見的按鈕,用於檢測觸摸。 2.單元格中的文本字段被替換爲一個標籤,然後觸摸,而不是由具有didSelectRowAtIndexPath的單元檢測到。
3.單元格中的textfield檢測到觸摸後,然後將didBeginEditing中的文本字段設置爲userInteractionEnabled = NO(不知道這是否可行)。

想想吧,你甚至可以嘗試#3而不創建第二個文本框。

0

你要求做的是禁用子菜單。

爲此子類的UITextField和實現以下方法

(BOOL)canPerformAction:(SEL)action withSender:(id)sender 
{ 
    return NO; 
} 

這將防止菜單無法顯示。

+0

你能詳細說明一個子菜單是如何防止文本被輸入/複製到UITextField的嗎? – Maple

相關問題