2012-06-20 36 views
0

我需要一個UIKeyboard來顯示默認UIKeyboardType而不是編號0-9。我只需要隱藏這些按鈕。UIKeyboard不帶編號

有沒有辦法訪問鍵盤的不同按鈕,所以我可以設置然後隱藏? 如果否,我可以檢測何時按下「。?123」按鈕並添加子視圖以覆蓋第一行? 或者任何指向更好方法的指針?

回答

3

沒有禁用訪問數字和標點鍵的公共API。您可以深入瞭解鍵盤的視圖層次結構,試圖隱藏數字切換鍵,但未來可能會中斷(鍵盤視圖層次結構在過去發生了變化)。

只要在文本控件的委託中過濾掉不喜歡的字符就簡單多了。例如,假設您只想讓用戶鍵入字母。如果你有一個UITextField,其委託設爲您的視圖控制器,並在您的視圖控制器實現此方法:如果你有一個UITextView

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSRange all = NSMakeRange(0, string.length); 
    if (all.length == 0) { 
     // deletion 
     return YES; 
    } 

    NSRange letters = [string rangeOfCharactersFromSet:[NSCharacterSet letterCharacterSet]]; 
    return NSEqualRanges(all, letters); 
} 

,該方法被調用textView:shouldChangeTextInRange:replacementText:

+0

感謝您的快速回復。 我想出這個: 'NSRange字母= [字符串rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:@ 「abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQURTUVWXYZ,:;() -/+ $&@?!」]];' 唯一的問題是退格被忽略。 –

+1

我已更新我的答案以允許刪除。你的字符集不會讓其他語言的用戶感到高興。我希望你能和你在一起。 –

+0

想出了一個方便的解決方案,謝謝你: 'if(all.length == 0){ //刪除 return YES; } NSMutableCharacterSet * charset = [NSCharacterSet letterCharacterSet]; [charset addCharactersInString:@「。,:;() -/+ $&@ ?!」]; NSRange letters = [string rangeOfCharacterFromSet:charset]; return NSEqualRanges(all,letters);' –