从UIPickerView切换到键盘

时间:2014-04-07 14:56:01

标签: ios7 keyboard uitextfield uipickerview uikeyboard

我有一个UIPickerView设置,附带一个工具栏按钮,允许用户从选择器视图切换到键盘视图。 pickerView应该向下滑动,键盘应该在它的位置向上滑动......理论上。

当用户点击textFieldDidBeginEditing中的文本字段时,会出现pickerView。

    elementPicker = [[UIPickerView alloc] init];
    [elementPicker setDelegate:self];
    elementPicker.showsSelectionIndicator = YES;
    ...
    [_itemElementField setInputView:elementPicker];

当用户点击"使用键盘"按钮,我有一个方法来解雇选择器并调用键盘。我可以毫无问题地解雇pickerview但是不能显示键盘!

HELP!

以下是用户想要键盘时调用的方法:

-(void)useKeyboardClicked:(id)sender {
    NSLog(@"'USE KEYBOARD' BUTTON CLICKED");

    // DISMISS THE PICKER VIEW
    [elementPicker removeFromSuperview];
    [_itemElementField resignFirstResponder];
    _itemElementField.inputAccessoryView = nil;

    // SET ELEMENTPICKER TO THE DEFAULT KEYBOARD
    elementPicker = UIKeyboardTypeDefault;
    [_itemElementField setInputView:elementPicker];

    // SHOW KEYBOARD
    [_itemElementField becomeFirstResponder];
}

我现在正抓住稻草,需要一些帮助!我甚至试图用

在头文件中定义一个键盘
 @property (strong, nonatomic) IBOutlet UIKeyboard *elementKeyboard;

但这并不适用于所有人。

2 个答案:

答案 0 :(得分:0)

这是解决方案首先,您必须声明布尔变量checkFlag以保留useKeyboardClicked的记录:

然后

-(void)useKeyboardClick:(id)sender

{

if (checkFlag) {
    checkFlag=false;
    [txtField setInputView:nil];
    [txtField reloadInputViews];
    [txtField setKeyboardAppearance:UIKeyboardAppearanceDefault]; //you can set UIKeyboardAppearnce as Dark,light, alert instead of Default
    [txtField setKeyboardType:UIKeyboardTypeDefault]; // you set decimal keyboard
} else {
    checkFlag=TRUE;

    [txtField setInputView:nil];
    [txtField setInputAccessoryView:numberToolbar];
    [txtField setInputView:pickerView];
}

}

有一件事我不是完全错了,但是我不能回头选择视图而不是键盘.....试试这个我给你提示......

答案 1 :(得分:0)

对于那些可能在将来遇到这个问题的人来说,答案最终很简单 使用 reloadInputViews 将其重置为键盘后,您需要重新加载输入视图

以下是代码:

-(void)useKeyboardClicked:(UITextField *)sender {
    NSLog(@"'USE KEYBOARD' BUTTON CLICKED");

    [_itemElementField setInputView:UIKeyboardTypeDefault];
    [_itemElementField becomeFirstResponder];
    [_itemElementField reloadInputViews]; 
}