2009-04-25 88 views

回答

22

如果你可以獲得UIKeyboard對象本身(SDK中沒有公開的東西,請注意,如果你使用這些調用,Apple可能不會很開心),那麼有一個方便的setReturnKeyEnabled:成員函數。

id keyboard = [self magicallyGetAUIKeyboardInstance]; 
[keyboard setReturnKeyEnabled: NO]; 

(通過2.2 iPhone框架Erica Sadun's dump

magicallyGetAUIKeyboardInstance的實現描述here

+0

還沒有機會測試它,但不應該只是[UIKeyboard activeKeyboard]工作? – 2009-04-25 18:28:18

+0

是否肯定Apple會拒絕使用此代碼的應用程序?即使實施是適當的? – samvermette 2010-11-06 22:52:55

+0

@sam蘋果不太可能會測試你對這個方法的調用,但它可能會改變底層API並破壞你的代碼。 – bshirley 2013-04-25 15:59:06

2

一個好主意是創建一個文件從任何地方訪問這個類。下面是代碼:

UIKeyboard.h

#import <UIKit/UIKit.h> 

@interface UIApplication (KeyboardView) 

    - (UIView *)keyboardView; 

@end 

UIKeyboard.m

#import "UIKeyboard.h" 

@implementation UIApplication (KeyboardView) 

- (UIView *)keyboardView 
{ 
    NSArray *windows = [self windows]; 
    for (UIWindow *window in [windows reverseObjectEnumerator]) 
    { 
     for (UIView *view in [window subviews]) 
     { 
      if (!strcmp(object_getClassName(view), "UIKeyboard")) 
      { 
       return view; 
      } 
     } 
    } 

    return nil; 
} 

@end 

現在,您可以導入並從自己的類訪問該類:

#import "UIKeyboard.h" 

    // Keyboard Instance Pointer. 
    UIView *keyboardView = [[UIApplication sharedApplication] keyboardView]; 

這個類,你可以在這裏找到的完整文檔:http://ericasadun.com/iPhoneDocs/_u_i_keyboard_8h-source.html

的更多信息,你可以在這裏找到:http://cocoawithlove.com/2009/04/showing-message-over-iphone-keyboard.html

64

可能是下面的代碼段幫助。

textfield.enablesReturnKeyAutomatically = YES; 

這是在UITextInputTraits iPhone SDK中公開可用。用這種方法,當沒有輸入文本的文本字段中提供

21

UITextFieldenablesReturnKeyAutomatically屬性可以直接在Interface Builder進行設置,只需選擇文本字段,打開屬性檢查器返回鍵將被禁用。正如Tharindu所說,這將根據是否輸入任何文本自動啓用和禁用返回鍵。

enter image description here

當然,如果你需要在代碼中改變這一點,你還是可以將它通過編程設定nameTextField.enablesReturnKeyAutomatically = true

編輯解決downvotes:

否則,沒有正式的方式來啓用和禁用命令的返回鍵。我建議不要嘗試使用私有API來完成此操作。或者,您可以使用textFieldShouldReturn:委託方法,並將您的條件/驗證放在那裏並作出相應的響應。

8

您可以覆蓋UITextFieldhasText屬性來實現這一目標:

class CustomTextField : UITextField { 
    override public var hasText: Bool { 
     get { 
      return evaluateString(text) 
     } 
    } 
} 

evaluateString(_ text: String?) -> Bool檢查對你所需要的輸入標準,例如字符數。

當然,這隻能與在UITextField上設置的enablesReturnKeyAutomatically = true結合使用。

我知道我的答案既不及時,也不是寫在Objective-C中,但鑑於我沒有能夠在其他任何地方找到答案,並且這個問題在其他線程中被常規引用,我認爲這裏是最好的地方發佈它。

相關問題