2011-05-25 36 views
2

我想把這樣的東西放在方法UITextField & UITextView如何將方法添加到UITextField和UITextView?

- (void)changeKeyboardType:(UIKeyboardType)keyboardType { 
    paymentTextView.keyboardType = UIKeyboardTypeAlphabet; 
    [paymentTextView resignFirstResponder]; 
    [paymentTextView becomeFirstResponder]; 
} 

我該怎麼做?我知道我可以爲UITextField & UITextView創建類別,但可以一次完成嗎?

通過一次拍攝,我的意思是將它添加到兩個類與一個協議,而不是兩個類別,一個用於UITextView &一個用於UITextField。我聽說一個協議類似於Ruby模塊,但是在Ruby模塊中,我可以實現該方法。在一個協議中,似乎我只能聲明該方法,但沒有實現它。我是否也可以在協議中實現該方法,然後將此協議包含在UITextField & UITextView

How to add a method to an existing protocol in Cocoa?接近但並不完全。

+0

爲什麼你需要一個類別呢?你也可以用一個簡單的方法來做到這一點,只需將textfield或textview作爲參數傳遞即可。 – 2011-05-25 20:16:37

+0

@Nick Weaver,我不需要一個類別,但是創建一個類別,然後在'.pch'文件中包含類別,可以讓我在任何文件中輕鬆地重複使用同一個方法。 – ma11hew28 2011-05-26 00:16:12

回答

4

這樣的事情呢?

// UIView+UITextInputTraits.h 

@interface UIView (UITextInputTraits) 
- (void)changeKeyboardType:(UIKeyboardType)keyboardType;  
@end 


// UIView+Additions.m 

#import "UIView+UITextInputTraits.h" 

@implementation UIView (UITextInputTraits) 

- (void)changeKeyboardType:(UIKeyboardType)keyboardType { 
    if ([self conformsToProtocol:@protocol(UITextInputTraits)]) { 
     id<UITextInputTraits> textInput = (id<UITextInputTraits>)self; 
     if (textInput.keyboardType != keyboardType) { 
      [self resignFirstResponder]; 
      textInput.keyboardType = keyboardType; 
      [self becomeFirstResponder]; 
     } 
    } 
} 

@end 
0

就像@Josh說的,方法混合不是你要找的。然而,我實際上想到的是(在提交答案之前不對它進行更深入的研究)是在UITextView和UITextField的運行時添加方法。雖然這需要更多的代碼來實現,但它可以給你一種你正在尋找的方法(你創建一個方法並在運行時將它添加到UITextView & UITextField中)

這是一篇博文一下:

http://theocacao.com/document.page/327

http://www.mikeash.com/pyblog/friday-qa-2010-11-6-creating-classes-at-runtime-in-objective-c.html

+0

Swizzling在這裏並不適用,因爲他試圖添加一個方法,而不是改變現有方法。 – 2011-05-25 20:49:01

+0

通過一次拍攝,我的意思是用一種協議將它添加到兩個類中,而不是創建兩個類別,一個用於「UITextView」,另一個用於「UITextField」。我聽說一個協議類似於Ruby模塊,但是在Ruby模塊中,我可以實現該方法。在一個協議中,似乎我只能聲明該方法。我是否也可以在協議中實施該方法?一切皆有可能。 – ma11hew28 2011-05-26 00:21:19

+0

您只能使用像您所說的協議來定義方法。至於@josh說的,他是對的。方法Swizzling不是我正在尋找的。我有點匆忙在這裏回答。我會更新它 – 2011-05-26 12:30:52

3

對於這些,你可以創建一個類別。

接口文件:

@interface UITextField (ChangeKeyboard) 
- (void)changeKeyboardType:(UIKeyboardType)keyboardType; 
@end 

實現文件:

@implementation UITextField (ChangeKeyboard) 
- (void)changeKeyboardType:(UIKeyboardType)keyboardType { 
    self.keyboardType = keyboardType; 
    [self resignFirstResponder]; 
    [self becomeFirstResponder]; 
} 
@end 

這將是添加這些的方式,但我沒有測試的功能。

+0

謝謝。這就是我的想法。但是,我也必須爲'UITextView'做到這一點,所以我想知道如何一次完成這個。我想出了一個解決方案(一次性完成)(http:// stackoverflow。COM /問題/ 6130315 /如何到添加-A-方法到的UITextField-的UITextView/6132880#6132880)。但是,您的解決方案雖然需要更多代碼並且擴展性較差,但更直接且更易於理解。 – ma11hew28 2011-05-29 18:51:56

相關問題