由于某种原因,方法DidBeginEditing:(UITextField *)textfield不起作用

时间:2013-08-29 00:24:44

标签: ios objective-c uitextfield

我正试图在键盘显示时向上移动视图,因此它不会掩盖屏幕,但由于某种原因,-(void)DidBeginEditing: (UITextField *)textfield无法正常工作。

- (void)textFieldDidBeginEditing:(UITextField *)ga1
{
    /* should move views */
    self.view.center = CGPointMake(self.view.center.x, self.view.center.y + 220);
}

- (void)textFieldDidEndEditing:(UITextField *)ga1
{
    /* should move views */
    self.view.center = CGPointMake(self.view.center.x, self.view.center.y - 220);

}

它也没有进入方法,谁能告诉我为什么?

3 个答案:

答案 0 :(得分:5)

在类的接口中添加行,所以在.m文件中你会把它放在@implementation所在的位置......

@interface MyClassName () <UITextFieldDelegate>
 // properties can also go here
 // for example dragging the IBOutlet for the textfield from the storyboard
@end

然后你在viewDidLoad中应该像这样设置UITextField的委托......

-(void)viewDidLoad {
 // whatever code
 self.textField.delegate = self;
}

或者,更干净地,您可以通过控制单击文本字段并将指示器拖动到下方栏中的视图控制器类图标(最左侧的图标),在故事板中执行此操作。

另外,为什么要在实现“ga1”中调用textField的参数?你应该称之为最佳实践

 - (void)textFieldDidBeginEditing:(UITextField *)textField

最后要注意的是,如果您有多个textField,则应按上述方式为每个textField设置委托。这就是故事板的方式是“更干净”的原因,因为它使您无法在代码中使用多个委托声明。

答案 1 :(得分:1)

如果实现,将调用它来代替textFieldDidEndEditing

@interface MyViewController :UIVieController <UITextFieldDelegate>
@property UITextField *myTextField
@end

@implementation MyViewController{

}

- (void)viewDidLoad {
    [super viewDidLoad];

    self.myTextfield.delegate=self;
}

    -(void)textFieldDidEndEditing:(UITextField *)textField reason:(UITextFieldDidEndEditingReason)reason{
            if(reason==UITextFieldDidEndEditingReasonCommitted)
            {
                NSLog(@"Committed");
            }
    }

答案 2 :(得分:0)

为您的班级实施<UITextFieldDelegate>协议。并将委托设置为self。这是Apple的文档UITextFieldDelegate Protocol