iPhone应用程序中显示/隐藏键盘的问题

Posted

技术标签:

【中文标题】iPhone应用程序中显示/隐藏键盘的问题【英文标题】:Problem showing/hiding keyboard in iPhone app 【发布时间】:2011-04-01 06:34:52 【问题描述】:

在我的 iPhone 应用中,我遇到了一些与键盘显示/隐藏行为相关的问题。

我有三个文本字段;单击第三个文本字段时,我想显示 UIPickerView 并隐藏该文本字段的键盘。我能做到的。

现在的问题是,如果第一个或第二个文本字段的键盘是可见的,并且我点击第三个文本字段,选择器变得可见,但它出现在键盘后面(它只在键盘后面第一个或第二个文本字段)。

那么我应该怎么做才能使选择器本身可见而不显示任何键盘呢?

这里是代码:-

-(void) textFieldDidBeginEditing:(UITextField *)textField

if (textField==thirdTextField) 

    [scroll setFrame:CGRectMake(00, 48, 320, 160)];
    [scroll setContentSize:CGSizeMake(320,335)];        
    [picker setHidden:NO];
    [tool1 setFrame:CGRectMake(0,180,320,44)];
    [tool1 setHidden:NO];
    [self.picker reloadAllComponents];

    [firtTextField resignFirstResponder];
    [secondTextField resignFirstResponder];
    [thirdTextField resignFirstResponder];
    
else   
      [scroll setFrame:CGRectMake(00, 48, 320, 200)];
      [scroll setContentSize:CGSizeMake(320,335)];
      [tool1 setHidden:NO];
      [tool1 setFrame:CGRectMake(0,220,320,44)];


问题是这样的

【问题讨论】:

【参考方案1】:

保留三个文本字段作为控制器的成员。

- (void)textFieldDidBeginEditing:(UITextField *)textField  
  if(textField == 3rdTextField)
    [self.firstTextField resignFirstResponder];
    [self.secondTextField resignFirstResponder];
    [self.thirdTextField resignFirstResponder];
  


- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
        if(textField==3rdTextField)
            [firstTextField resignFirstResponder];
            [secondTextField resignFirstResponder];
         
        else if(textField==secondTextField)
            [firstTextField resignFirstResponder];
            [3rdTextField resignFirstResponder];
         
        else if(textField==firstTextField)
            [secondTextField resignFirstResponder];
            [3rdTextField resignFirstResponder];
         

       return YES;
 

希望这会对你有所帮助。

【讨论】:

感谢您的回复,但这不起作用我无法在我的pickerview前面隐藏键盘【参考方案2】:

打电话

[yourTextField resignFirstResponder]

在所有其他文本字段上使其键盘消失。

【讨论】:

【参考方案3】:

使用 resignFirstResponder 方法和文本字段。 [textField resignFirstResponder] 将隐藏键盘。

【讨论】:

我在回答的时候没有看到他的回复。对不起。【参考方案4】:

然后在键盘可见时使用通知,并具有一个名为Ispickermisible的布尔值。 在keyboardDidShow 方法中检查picker 是否可见。如果它可见,则将其隐藏。 添加通知:

[[NSNotificationCenter defaultCenter] addObserver:self
                                        selector:@selector(keyboardDidShow:)
                                           name:UIKeyboardWillShowNotification
                                          object:nil];
而且方法...
- (void)keyboardDidShow:(NSNotification*)notif 
    if(isPickerVisible) 
        [self hidePicker];
       

希望这会有所帮助...

【讨论】:

-1:OP 说该部分已经在工作:...显示 UIPickerView 并隐藏该文本字段的键盘。我能做到的。【参考方案5】:

In - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 方法对除第三个 textFied 之外的所有文本字段使用 resignFirstResponder:-

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField

        if(textField==thirdTextField)
        
            [firstTextField resignFirstResponder];
            [secondTextField resignFirstResponder];
            [textField resignFirstResponder];

            [self showPickerView];
         
       return YES;
 

【讨论】:

以上是关于iPhone应用程序中显示/隐藏键盘的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Phonegap 和 javascript 在 iPhone 上隐藏和显示键盘

iPhone 键盘隐藏 UISeachBar

iPhone 6 模拟器,隐藏键盘问题

iPhone - 键盘隐藏文本字段

android 横屏状态,如何监听键盘的弹起与隐藏

如何显示被虚拟键盘隐藏的文本字段?