2010-12-16 57 views
3

我有子類UITextField,所以我可以爲它創建一些自定義行爲。這裏是我的課:Objective C iPhone的子類化UITextField捕獲值更改

DataboundTextField.h

#import <Foundation/Foundation.h> 
#import <UIKit/UIKit.h> 
#import "TestEntities.h" 

@interface DataboundTextField : UITextField <UITextFieldDelegate> { 
NSString *valueMember; 
NSString *displayValueMember; 
ODataObject *boundEntity; 

} 
@property (nonatomic, retain) NSString *valueMember; 
@property (nonatomic, retain) NSString *displayValueMember; 
@property (nonatomic, retain) ODataObject *boundEntity; 
-(void)SetupDataBinding:(ODataObject*)oDataEntity ValueMember:(NSString*)valMemberID DisplayValueMember:(NSString*)disValMember; 

@end 

DataboundTextField.m

#import "DataboundTextField.h" 

@implementation DataboundTextField 

@synthesize valueMember; 
@synthesize displayValueMember; 
@synthesize boundEntity; 

-(id) initWithCoder:(NSCoder *)aDecoder{ 
if ((self = [super initWithCoder:aDecoder])) 
{ 
    self.delegate = self; 
} 

return self; 
} 



-(void)SetupDataBinding:(ODataObject*)oDataEntity ValueMember:(NSString*)valMemberID DisplayValueMember:(NSString*)disValMember{ 

} 

-(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 
return YES; 
} 

@end 

我該如何去了解重寫ValueChanged事件?我似乎無法抓住它,但我嘗試。我想要做的就是在視圖中隱藏這些子文本字段中的一個,並捕獲該事件並處理它。

請幫忙。

在此先感謝

+0

取決於你需要用UITextField做什麼,你可能不需要子類。用UITextFieldDelegate方法可以做很多事情。 – 2010-12-16 01:25:54

+0

我希望這個類可以在整個項目中重用,所以我不認爲使用委託就足夠了。 – IPadHackAndSlash 2010-12-16 01:37:48

回答

1

根據對UITextFieldDelegate的文檔,你可以使用

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

文本字段調用此方法每當用戶在文本字段中一個新的人物或刪除現有的字符。

請務必將您UITextFielddelegate屬性:

- (id)init 
{ 
    if ((self = [super init])) 
    { 
     self.delegate = self; 
    } 
} 
+0

我試過了,但它似乎並沒有起火。我編輯了我的帖子,向你展示我現在擁有的東西。 – IPadHackAndSlash 2010-12-16 01:36:25

+0

你在設置UITextField的代表嗎? – 2010-12-16 01:47:23

+1

我現在重寫了initwithcoder並將代理設置爲自己(在post中更改代碼以顯示我做了什麼)。但現在,當我在運行時點擊文本框時,整個應用程序掛起? – IPadHackAndSlash 2010-12-16 03:06:26

-1

這是我已經習慣了只允許某些字符,以及有多少個字符允許的文本框:

- (BOOL)textField:(UITextField *)theTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 
    /* allow only these characters in the textField */ 
    NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890|:[email protected]~_-+#!{}%*"]; 
    for (int i = 0; i < [string length]; i++) { 
     unichar c = [string characterAtIndex:i]; 
     if (![myCharSet characterIsMember:c]) { 
      return NO; 
     } 
    } 
    /* choose how many characters the textField can have */ 
    NSUInteger newLength = [theTextField.text length] + [string length] - range.length; 
    return (newLength > 28) ? NO : YES; 
}