如何将文本字段添加到inputAccessoryView并使textView作为第一响应者

Mic*_*ael 8 objective-c uitextfield ipad ios

我的代码:

- (void)viewDidLoad {

    [super viewDidLoad];

    CGRect rectFake = CGRectZero;

    UITextField *fakeField = [[UITextField alloc] initWithFrame:rectFake];

    [self.view addSubview:fakeField];

    UIView *av = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 0.0, 39.0)];

    av.backgroundColor = [UIColor darkGrayColor];

    CGRect rect = CGRectMake(200.0, 4.0, 400.0, 31.0);

    UITextField *textField = [[UITextField alloc] initWithFrame:rect];

    textField.borderStyle = UITextBorderStyleRoundedRect;

    textField.font = [UIFont systemFontOfSize:24.0];

    textField.delegate = self;

    [av addSubview:textField];

    fakeField.inputAccessoryView = av;

    [fakeField becomeFirstResponder];

}
Run Code Online (Sandbox Code Playgroud)

我试着补充一下

[textField becomeFirstResponder] 
Run Code Online (Sandbox Code Playgroud)

最后,但它没有用.

在按下ENTER时委托方法隐藏键盘的另一个问题也不起作用.

- (BOOL) textFieldShouldReturn:(UITextField *)textField {

    [textField resignFirstResponder];

    return YES;
}
Run Code Online (Sandbox Code Playgroud)

Tom*_*Tom 15

我面临同样的挑战.您(和我的初始)方法可能不起作用,因为该文本字段inputAccessoryView拒绝成为第一响应者,因为它UITextField最初不在您的屏幕上.

我的解决方案:检查键盘(以及配件视图)出现的时间!

步骤1)监听通知(确保在您想要接收通知之前执行此代码).

[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(changeFirstResponder)
                                             name:UIKeyboardDidShowNotification 
                                           object:nil];
Run Code Online (Sandbox Code Playgroud)

步骤2)当键盘出现时,您可以将您的文本字段设置为inputAccessoryView第一响应者:

-(void)changeFirstResponder
{
    [textField becomeFirstResponder];  // will return YES;
}
Run Code Online (Sandbox Code Playgroud)

  • 汤姆,我不确定使用NSNotification是不是一个好主意.如果我在视图上有另一个文本字段并点击它,那么您的代码是否会干扰我点击的其他文本字段?隐藏文本字段方法工作正常,我所做的只是添加隐藏文本字段,然后在按钮点击,我调用我的方法使隐藏文本字段第一响应者,然后立即将inputAccessoryView文本字段设置为第一响应者.无需任何NSNotification观察. (4认同)
  • 当我按下完成按钮后调用`[textField resignFirstResponder];`时,输入附件视图向下滑动到屏幕底部并停留在那里.我是否需要手动将其从视图中删除? (2认同)