按uibutton时显示带有textField的键盘

时间:2016-03-25 03:38:51

标签: ios objective-c uibutton keyboard

我有一个按钮:

@property (weak, nonatomic) IBOutlet UIBarButtonItem *addTaskBtn;

...

// Add new task button action.
- (IBAction)addTaskBtnAction:(id)sender {

}

当我按下按钮时,我想要一个带有文本域附件工具栏的键盘弹出。那个文本域也应该成为第一个引起悖论的反应者......

我发现如果不将键盘作为现有textfiled的第一响应者,就无法显示键盘,但我正在尝试将文本字段创建为键盘的工具栏。

最好的例子就是在这个应用程序中:https://todoist.com/ - 他们设法完成了我想要实现的目标。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

为隐藏文本字段尝试此代码:
将txtHidden设为隐藏,并在按钮单击时将其作为第一响应者

- (IBAction)btnOpenTextfield:(id)sender {
    [self.txtHidden becomeFirstResponder];
}

- (void) setupToolbar {
    UIToolbar *keyboardToolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 42)];
    self.txtToolbar = [[UITextField alloc] initWithFrame:CGRectMake(8, 6, 250, 30)];
    UIBarButtonItem *textBtn = [[UIBarButtonItem alloc] initWithCustomView:self.txtToolbar ];
    UIBarButtonItem *postBtn = [[UIBarButtonItem alloc]initWithTitle:@"Post" style:UIBarButtonItemStyleBordered target:self action:@selector(postComment)];
    [keyboardToolBar setItems: [NSArray arrayWithObjects:textBtn,postBtn,nil]];
    self.txtHidden.inputAccessoryView = keyboardToolBar;
}

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    if (textField == self.txtHidden) {
        [self setupToolbar];
    }
    return true;
}

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    [self performSelector:@selector(changeResponder) withObject:nil afterDelay:0.1];
    [self changeResponder];
}

- (void) changeResponder {
    [self.txtToolbar becomeFirstResponder];
}

这不是最好的方法,但你可以尝试这个,直到你得到任何其他更好的解决方案