0

我试图在键盘显示时向上移动视图,这样它就不会覆盖屏幕,但由于某种原因它-(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);

}

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

4

3 回答 3

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

最后一点是,如果您有多个文本字段,您应该按照上述方式为每个文本字段设置委托。这就是故事板的执行方式“更干净”的原因,因为它可以防止您在代码中使用多个委托声明。

于 2013-08-29T00:33:57.047 回答
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");
            }
    }
于 2017-05-26T10:57:32.647 回答
0

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

于 2013-08-29T00:28:00.660 回答