0

私のアプリには、かなりの数の入力があるフォームであるビューがあります。UITextField が を呼び出すとtextFieldDidBeginEditing、タグがチェックされ、入力の意図に応じて UIPopoverController またはキーボードが表示されます。

キーボードが起動している場合、ユーザーがポップオーバーを表示するテキストフィールドを押すとキーボードが消える必要があります。しかし、それを消すことはできません。キーボードを取り除くためにあらゆる方法を試しましたが、そこにとどまっています。私が試してみました:

  • 呼び込みresignFirstResponder_textFieldDidEndEditing
  • 呼び込み[self.view endEditing:YES]_textFieldDidEndEditing
  • 前のタグのチェックでresignFirstResponderAND[self.view endEditing:YES]を呼び出すことは、キーボード入力テキスト フィールドと同じです。textFieldDidBeginEditing

どんなアイデアでも素晴らしいでしょう。

誰かが正確な動作を見たい場合は、それを切り取ってサンプルプロジェクトに入れました。 http://dl.dropbox.com/u/61692457/KB_Test.zip

4

2 に答える 2

2

.h ファイルでグローバル UITextField を宣言する

UITextField *txtfld;

メソッド textFieldDidBeginEditing を textFieldShouldBeginEditing に置き換えて、このコードを記述します

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

if (textField.tag == 1 || textField.tag==3)
{

    if(numPickerPopover == nil)
    {   

        numPicker = [[[NumPicker alloc] initWithStyle:UITableViewStylePlain] autorelease];

        numPicker.delegate = self;

        numPickerPopover = [[UIPopoverController alloc] initWithContentViewController:numPicker];
        [numPickerPopover setPopoverContentSize:CGSizeMake(60.0, 260.0f)];
    }

    [numPickerPopover presentPopoverFromRect:textField.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

    [txtfld resignFirstResponder];
    return NO;
}


if (textField.tag == 2)

{

    txtfld = textField;

    return YES;
}

return YES;    

}
于 2012-06-29T04:24:03.600 に答える
0

ユーザーがキーボードを起動した textField に触れたときにキーボードを閉じるには、次のメソッドを追加します。

- (IBAction)dismissKeyboard:(id)sender {

    [textField resignFirstResponder];
}

Interface Builder で、このメソッドを必要な textField イベントに接続します (内部のタッチアップ (またはより適切なもの) など)。

于 2012-06-29T03:03:25.010 に答える