2015-12-08 39 views
6

我想在我的應用程序的所有文本框禁用自動更正。我知道UITextField上的autocorrectionType屬性。但是,當我開始開發我的應用程序時,我沒有繼承UITextField。所以我正在尋找一種解決方案,通過一行代碼禁用所有TextField的自動更正。禁用自動校正

我試着用[UITextField appearance],它適用於鍵盤外觀:

[[UITextField appearance] setKeyboardAppearance:UIKeyboardAppearanceDark]; 

但不適合自動更正,因爲下面的代碼行:

[[UITextField appearance] setAutocorrectionType:UITextAutocorrectionTypeNo]; 

導致不一致的異常:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Please file a radar on UIKit if you see this assertion.' 
+0

有趣的問題。也許這與textFieldDelegate類有關,而不是textField本身。你添加了那個班嗎? – lukaivicev

+0

請您詳細說明一下嗎?不知道你的意思是通過添加'textFieldDelegate'。我開始認爲'UITextField'的外觀代理中沒有實現自動更正屬性,這是一個恥辱:/。也許我應該實際上'在UIKit上提交一個雷達',就像它在異常消息中說的那樣。 – Hless

+0

https://developer.apple.com/library/prerelease/tvos/documentation/UIKit/Reference/UITextInputTraits_Protocol/index.html#//apple_ref/occ/intfp/UITextInputTraits/autocorrectionType檢查出以及這些鏈接:檢查這一點:http://stackoverflow.com/questions/2474824/iphone-issue-disabling-auto-cap-autocorrect-on-a-uitextfield這http://stackoverflow.com/questions/827310/disable-auto-更正iphone-text-field – lukaivicev

回答

1

我建議去與子類的UITextField

@interface CustomTextField : UITextField 
@end 
@implementation CustomTextField 
- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
     [self setAutocorrectionType:UITextAutocorrectionTypeNo]; 

     // same way add all the generalize properties which you require for all the textfields. 
    } 
return self; 
} 

現在使用CustomTextField在全國各地的項目(無論是在代碼中或在故事板)。

希望這會有所幫助。

+0

感謝您的答案。我知道子類化,我實際上想知道爲什麼指針不起作用(就像鍵盤外觀一樣)。子類化絕對不是單行解決方案,因爲我需要替換所有UITextField事件。 – Hless

+0

這可能是因爲'AutocorrectionType'屬性不被視爲'UIAppearance'的一部分(根本不是用戶界面,它屬於用戶體驗)。而「UIKeyboardAppearance」與UI外觀相關(在用戶界面上可見)。 – Mrunal

+0

可以通過使用catagory來完成嗎? – AsimRazaKhan