Цель C Подклассы IPhone UITextField catch Значение изменено - PullRequest
3 голосов
/ 16 декабря 2010

У меня есть подкласс 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? Я не могу поймать это, однако я пытаюсь. Все, что я хочу сделать - это закрепить одно из этих подклассовых текстовых полей в представлении, перехватить это событие и обработать его.

Пожалуйста, помогите.

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 16 декабря 2010

Согласно документации для UITextFieldDelegate, вы можете использовать

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

Текстовое поле вызывает этот метод всякий раз, когда пользователь вводит новый символ в текстовое поле или удаляет существующий символ.

Убедитесь, что вы установили свойство delegate вашего UITextField:

- (id)init
{
    if ((self = [super init]))
    {
        self.delegate = self;
    }
}
0 голосов
/ 16 декабря 2010

Это то, что я использовал, чтобы разрешить только определенные символы, а также сколько символов разрешено для textField:

- (BOOL)textField:(UITextField *)theTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    /*  allow only these characters in the textField  */   
    NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890|:.@~_-+#!{}%*"];
    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;
} 
...