0

UITextfieldsのinputAccessoryViewにツールバーがあります。「次へ」ボタンを押すと、すべてのテキストフィールドのorderedSet内の次のテキストフィールドが最初のレスポンダーになります。それは完璧に機能します。

しかし、「前の」テキストフィールドをFirstResponderにすることはできません。

コンソールをチェックインし、テキストフィールドがtextFieldShouldBeginEditingを呼び出し、YESを返しますが、textFieldDidBeginEditingを呼び出すことはなく、resignFirstResponderが必要なテキストフィールドがtextFieldShouldEndEditingを呼び出すことはありません。

したがって、テキストフィールドはメッセージをFirstResponderに取得していますが、取得していません。

- (IBAction)keyboardBarButtonDidTouch:(UIBarButtonItem *)sender
{
    if (sender==self.previousBarButton&&self.activeTextFieldArrayIndex.intValue>0)
    {
        [(UITextField *)[self.textfields objectAtIndex:(self.activeTextFieldArrayIndex.intValue-1)] becomeFirstResponder];
    }
    if (sender==self.nextBarButton&&self.activeTextFieldArrayIndex.intValue<(self.textfields.count-1))
    {
        [(UITextField *)[self.textfields objectAtIndex:(self.activeTextFieldArrayIndex.intValue+1)] becomeFirstResponder];
    }
    if (sender==self.doneBarButton)
    {
        [self.activeTextField resignFirstResponder];
    }
}

最も奇妙なことは、それを実行するアクションによってテキストフィールドに強制的にResignFirstResponderを実行すると、「前の」テキストフィールドが突然FirstResponderになることです。レスポンダーのリストに追加されていて、順番になったように…。

4

2 に答える 2

0

そして、奇妙なことが起こったときによくあることですが、それはファーストレスポンダーになることとは無関係でした。テキストフィールドデリゲートを介して、一連のロジックの途中で誤ってactiveTextfieldポインターをnilに変更していました。^ o ^

無視!

于 2012-08-13T02:40:46.573 に答える
-2

1)コードのエラーを減らしてみてください。

これの代わりに

if(sender==self.previousBarButton&&self.activeTextFieldArrayIndex.intValue>0)

これを行う

if ((sender==self.previousBarButton) && (self.activeTextFieldArrayIndex.intValue>0))

2)textfield.tagプロパティを使用して、これらのテキストフィールドに一意のタグを設定します。を使用して最初の応答者になる/辞任することについてあなたの仕事をします

(uitextfield *)field[self viewWithTag: uniqueTag];
于 2012-07-20T18:59:07.643 に答える