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

时间:2011-09-07 13:21:37

标签: objective-c ios ipad uitextfield

我的代码:

- (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;
}

1 个答案:

答案 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;
}