我的代码:
- (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];
}
我尝试添加
[textField becomeFirstResponder]
最后,但它没有用。
在按下ENTER时委托方法隐藏键盘的另一个问题也不起作用。
- (BOOL) textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
答案 0 :(得分:15)
我面临同样的挑战。您的(以及我的初始)方法可能无效,因为inputAccessoryView
中的文字字段拒绝成为第一响应者,因为UITextField
最初未位于您的屏幕上。
我的解决方案:检查键盘(以及附件视图)何时出现!
步骤1)收听通知(确保在您想要接收通知之前执行此代码)。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(changeFirstResponder)
name:UIKeyboardDidShowNotification
object:nil];
步骤2)当键盘出现时,您可以将inputAccessoryView
中的文本字段设置为第一响应者:
-(void)changeFirstResponder
{
[textField becomeFirstResponder]; // will return YES;
}