0

私の iOS アプリには約 12 個のフィールドを持つフォームがあり、キーボードの上に「前へ」/「次へ」ボタンを追加して、ユーザーがフィールド間を移動できるようにしたいと考えていました。私はこのようなものを持っています:

for (UITextField *t in _textfields) {
    t.delegate = self;

    UIToolbar *toolbar = [[UIToolbar alloc] init];
    [toolbar setBarStyle:UIBarStyleBlackTranslucent];

    UISegmentedControl *segControl = [[UISegmentedControl alloc] initWithItems:@[@"Previous", @"Next"]];
    [segControl addTarget:self action:@selector(switchTextField:) forControlEvents:UIControlEventValueChanged];
    segControl.segmentedControlStyle = UISegmentedControlStyleBar;
    segControl.tag = [_textfields indexOfObject:t];
    if (segControl.tag == 0) [segControl setEnabled:NO forSegmentAtIndex:0];
    else if (segControl.tag == [_textfields count] - 1) [segControl setEnabled:NO forSegmentAtIndex:1];

    [segControl sizeToFit];

    UIBarButtonItem *segItem = [[UIBarButtonItem alloc] initWithCustomView:segControl];

    UIBarButtonItem *flexButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
    UIBarButtonItem *doneButton =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self.view action:@selector(endEditing:)];
    [toolbar setItems:@[segItem, flexButton, doneButton]];
    [toolbar sizeToFit];
    [t setInputAccessoryView:toolbar];
}

私が抱えている問題は、セグメントの 1 つが頻繁に機能しなくなることです。メソッドswitchTextFieldが呼び出されないだけで、ボタンは無効ではなく正常に見えますが、タッチは登録されません。「前の」ボタンの場合もあれば、「次の」ボタンの場合もあり、両方が同時に機能することはなく、両方が正常に機能する場合もあります。ボタンの 1 つが動かなくなったら、それを (一時的に) 修正する唯一の方法は、ツールバーを使用せずに別のテキストフィールドをタップするか、キーボードを閉じて編集を再開することです。何が問題なのですか?

4

1 に答える 1

1

UIButtonセグメント化されたコントロールは、前/次のコントロールの動作が本当に必要な場合には適していません。

私が考えているのは、セグメント化されたコントロールとセグメントが選択されていない状態でツールバーを初期化しているということです。そのため、最初に前/次をタップすると、値が変化し、その特定のセグメント化されたコントロールに対してそのセグメントが選択されます。前/次をタップし続けると、最終的には既にセグメントが選択されているセグメント化されたコントロールに到達し、そのセグメントは既に選択されているセグメントであるため、タップされたときに値変更イベントを発生させません。

メソッドで選択したセグメントを明示的に選択解除switchTextField:するか (再帰的にトリガーしないようにしてください) 、セグメント化されたコントロールの代わりに前/次のオブジェクトをswitchTextField:使用するように実装を変更できます。UIButton

で行くことをお勧めしUIButtonます。

于 2013-02-27T19:00:54.940 に答える