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

时间:2011-04-01 06:34:52

标签: iphone objective-c cocoa ios4

在我的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)];
}
}

问题就像

enter image description here

5 个答案:

答案 0 :(得分:7)

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

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

希望这会对你有所帮助。

答案 1 :(得分:3)

致电

[yourTextField resignFirstResponder]

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

然后在键盘变为可见时使用通知,并使用名为isPickerVisible的布尔值。
当选择器变为可见时,将isPickerVisible设置为TRUE。
在keyboardDidShow方法中检查选择器是否可见。如果可见则隐藏它。
添加通知:

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardDidShow:)
name:UIKeyboardWillShowNotification
object:nil];
方法......

- (void)keyboardDidShow:(NSNotification*)notif {
    if(isPickerVisible) {
        [self hidePicker];
    }   
}

希望这有助于......

答案 4 :(得分:0)

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

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
        if(textField==thirdTextField)
        {
            [firstTextField resignFirstResponder];
            [secondTextField resignFirstResponder];
            [textField resignFirstResponder];

            [self showPickerView];
         }
       return YES;
 }