2

キーボードを表示する代わりに、textFieldが選択されたときにポップオーバービューを表示したいと思います(私のコードは下部にあります)。キーボードが表示されていない場合は、すべてが正常に機能します。ただし、キーボードが表示されていて、テキストフィールドが選択されている場合、キーボードは閉じられません。どこかでfirstRespondersが失われているはずですが、どこにあるのかわかりません。誰かがこれに対する解決策を持っていますか?

私のテキストフィールド:

    self.startDateTextField = [[UITextField alloc] initWithFrame:CGRectMake(79, 148, 138, 27)];
[self.startDateTextField setBorderStyle:UITextBorderStyleRoundedRect];
[self.startDateTextField setDelegate:delegate];
[self.startDateTextField addTarget:delegate action:@selector(editStartDate:) forControlEvents:UIControlEventEditingDidBegin];
[popoverWrapper addSubview:self.startDateTextField];

そしてeditStartDate:私は持っています:

-(void)editStartDate:(UITextField *)textField {

[textField resignFirstResponder];

DatePickerVC *datePickerVC = [[DatePickerVC alloc] init];
datePickerVC.delegate = self;

self.popoverController = [[UIPopoverController alloc] initWithContentViewController:datePickerVC];
[self.popoverController setDelegate:self];

[self.popoverController presentPopoverFromRect:CGRectMake(0, 0, 5, 5) inView:textField permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES];
}
4

5 に答える 5

1

あなたはテキストフィールドの最初の応答者を辞任しているようです。ただし、これは必ずしも最初の応答者ではありません。これは、それを呼び出しても効果がない理由を説明している可能性があります。

代わりに、endEditingカテゴリを使用して、ビューのすべての子を再帰的に処理し、接続されているビューから最初のレスポンダーを辞任する必要があります。

[self.view endEditing:YES];

いずれにせよ、キーボードを表示したくないのでUITextFieldDelegate、デフォルトの動作をオーバーライドするように実装するだけです。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    // Your popover code.

    return NO;
}

UITextFieldDelegateプロトコルリファレンス。

于 2012-04-09T16:59:05.127 に答える
1

editStartDate:あなたの方法でこのようにしてみてください

[self.startDateTextField resignFirstResponder];

編集: しかし、テキストフィールドをクリックしたときにキーボードを再署名する代わりに、テキストフィールドのsetInputViewのようなものを作成して、popViewControllerを引き出すことができます。

DatePickerVC *datePickerVC = [[DatePickerVC alloc] init];
datePickerVC.delegate = self;

self.popoverController = [[UIPopoverController alloc] initWithContentViewController:datePickerVC];
[self.popoverController setDelegate:self];

[self.popoverController presentPopoverFromRect:CGRectMake(0, 0, 5, 5) inView:textField permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES];

 self.startDateTextField = [[UITextField alloc] initWithFrame:CGRectMake(79, 148, 138, 27)];
[self.startDateTextField setBorderStyle:UITextBorderStyleRoundedRect];
[self.startDateTextField setDelegate:delegate];
self.startDateTextField.inputView = self.popoverController;
于 2012-04-07T08:00:10.080 に答える