iphone - 当点击另一个 UITextField 调出选择器时,键盘不会关闭

标签 iphone ios objective-c uipickerview uipickerviewcontroller

我有 2 个文本字段,单击时我正在处理每个文本字段,打开一个选择器轮,顶部有一个工具栏,可以选择关闭选择器并调出键盘一切正常,除非你关闭选择器并带上向上键盘然后单击下一个文本字段。我把键盘放在上面,后面是新的 pickerview。使键盘消失的唯一方法是在第一个文本字段中单击返回并单击完成或屏幕上的任何位置(不是文本字段)。

这是我的代码:

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    for (NSUInteger i = 0; i<[self.fieldsArray count]; i++) {
        if ([self.fieldsArray objectAtIndex:i] == textField) {
            UITextField *input = [self.fieldsArray objectAtIndex:i];

            if (input.tag == 3 && !self.overrideDriver) {
                [self animatePickDriverForInput:input];
            }
            if (input.tag == 4 && !self.overrideVehicle) {
                [self animatePickVehicleForInput:input];
            }

        }
    }
}

下面是一些其他使用的方法:

- (IBAction)textFieldFinished:(id)sender
{
    [sender resignFirstResponder];
}


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

    [textField resignFirstResponder];

    return YES;

}

- (void)animatePickDriverForInput:(UITextField *)input
{
    if ([self.drivers count] > 0) {
        [self.view endEditing:YES];
        [self showPickDriver];
    } else {
        //untested
        [input addTarget:self action:@selector(textFieldFinished:)
            forControlEvents:UIControlEventEditingDidEndOnExit];
    }
}


- (void)animatePickVehicleForInput:(UITextField *)input
{
    if ([self.vehicles count] > 0) {
        [self.view endEditing:YES];
        [self showPickVehicle];
    } else {
        //untested
        [input addTarget:self action:@selector(textFieldFinished:)
            forControlEvents:UIControlEventEditingDidEndOnExit];
    }
}

- (void)allowManualEntryOfDriver
{
    [self.additionalButtonPickerHelper animateDismiss:self.pickDriver];
    self.overrideDriver = YES;
    [self.driver becomeFirstResponder];
}

- (void)allowManualEntryOfVehicle
{
    [self.additionalButtonPickerHelper animateDismiss:self.pickVehicle];
    self.overrideVehicle = YES;
    [self.vehicle becomeFirstResponder];
}



- (void)showPickVehicle {
    self.pickVehicle = [self.additionalButtonPickerHelper createPicker:self.pickVehicle WithTag:2 WithOtherButtonText:@"Add Other Vehicle"];
    [self.additionalButtonPickerHelper showPicker:self.pickVehicle WithDoneAction:@selector(dismissVehiclePicker) OrWithOtherAction:@selector(allowManualEntryOfVehicle)];
}

- (void)showPickDriver {
    self.pickDriver = [self.additionalButtonPickerHelper createPicker:self.pickDriver WithTag:1 WithOtherButtonText:@"Add Other Driver"];
    [self.additionalButtonPickerHelper showPicker:self.pickDriver WithDoneAction:@selector(dismissDriverPicker) OrWithOtherAction:@selector(allowManualEntryOfDriver)];
}

编辑:

更多代码:

- (void)dismissDriverPicker
{
    [self.additionalButtonPickerHelper animateDismiss:self.pickDriver];
}

- (void)dismissVehiclePicker
{
    [self.additionalButtonPickerHelper animateDismiss:self.pickVehicle];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.view endEditing:YES];
}

这可能不是最有效的方法,但我是 objective-c 的新手,正在寻找我能理解的解决方案。谢谢!

编辑这里是图片keyboard being stuck

最佳答案

您也可以尝试使用 textField 的属性:inputView

The custom input view to display when the text field becomes the first responder.

因此,您可以显示此 View 而不是键盘,并且不要手动处理它。

或者:

现在出现错误行为,因为还显示了第二个文本字段的键盘。所以你不仅要辞去first field的first responder,还要实现:

-(BOOL) textFieldShouldBeginEditing:(UITextField *)field {
    return NO;
}

关于iphone - 当点击另一个 UITextField 调出选择器时,键盘不会关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16106047/

相关文章:

iphone - 从不同的 .xib 文件访问 App Delegate 信息

ios - XCode 不构建 Unity3D 项目 : lib not found

ios - 知道耳机何时连接到 3.5 毫米插孔仅在应用程序启动前未连接时有效

运行应用程序时 iOS Phonegap 无限对话框错误?

ios - UINavigationController 堆栈中 UIViewController 的不同界面方向

iphone - 获取正在平移的 View 的字典键并将其添加到数组中

objective-c - 如何处理带空格的文件名?

ios - 在这个项目中,为什么我无法访问我从 nib 加载的 View 属性?

iphone - 只有一个数据上下文的核心数据。这样对吗?

ios - 如何每天更新一次 UILabel