未触发UITextfield textfieldchange事件

时间:2016-05-30 12:44:53

标签: ios iphone xcode ipad uitextfield

我已经连接了UITextField并编写了这段代码

-(void)viewDidLoad
{
   [txtName addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];

}

-(void)textFieldDidChange :(UITextField *)theTextField{
NSLog(@"Text changed");
}

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if(textField==txtName)
    {
          [self.view endEditing:YES];
[self performSelector:@selector(ShowNames) withObject:nil afterDelay:0.1];
return NO;
}
return YES;

}

-(void)textFieldDidChange :(UITextField *)theTextField{未被解雇 无法理解我的错误在哪里

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:0)

替换代码方法

-(void)textFieldDidChange :(UITextField *)theTextField{
NSLog(@"Text changed");
}

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

答案 1 :(得分:0)

如果你想要UITextField事件,你应该使用UITextFieldDelegate

在您的.h文件中采用UITextFieldDelegate

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UITextFieldDelegate>

然后在你的.m文件中

- (void)viewDidLoad
{
    [super viewDidLoad];
     [_txtName setDelegate:self];
}

如果您有任何问题,请告诉我

答案 2 :(得分:0)

您的想法是正确的,但您的问题属于-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField方法。

现在,在编辑此方法之前,如果方法返回NO,那么-(void)textFieldDidChange :(UITextField *)theTextField方法将被调用。

您的if语句测试以查看应该开始编辑的textField是否与txtName相同。如果是,则返回 NO 而不是 YES 。我认为你只需要交换你的NO和YES,你就会变成金色。

试试这个:

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    if(textField==txtName)
    {
          [self.view endEditing:YES];
          [self performSelector:@selector(ShowNames) withObject:nil afterDelay:0.1];
          return YES;
    }
    return NO;
}