0

ユーザーがテーブルビューをナビゲートするときに無効になっているテキストフィールドをスキップしようとしています。ただし、表示されているセルの境界に達すると、テキストフィールドが無効になっているかどうかを検出しようとしているため、すべてがうまくいきません。無効になっている場合は、メソッドを再帰的に再度呼び出して、もう一度ナビゲートします。すなわち。ユーザーがボタンを押して右に移動し、そのテキストフィールドが無効になっている場合は、もう一度右プレスを再帰的に呼び出します。

表示されている範囲外のセルのテキストフィールドは無効になっているようです。ユーザーがテーブルの端に到達すると、無限ループに陥ります。そうしないと、問題が発生します。

これが私のコードのセクションで、有効なチェックを行い、そうでない場合は再帰呼び出しを行います。これは本当にそれほど複雑なことではありません。論理的には、移動したばかりのテキストフィールドが無効になっているかどうかを検出し、無効になっている場合は、同じボタンをもう一度押すだけです。特別なことは何もありません。

いくつかのプレイテストで編集すると、destinationIndexPathとnewTagの値は正しいものの、nextTextFieldSelectionがnullとして戻ってくることが明らかになりました。表示されていないindexPathを要求すると、nullが返される可能性はありますか?

     //logic to move to next text field and manually scroll the tableViewbased on button input is here

    nextTextFieldSelection = (UITextField *)[[_tableView cellForRowAtIndexPath:destinationIndexPath] viewWithTag:newTag];
    if (nextTextFieldSelection.userInteractionEnabled == NO) {
        switch (arrowButton.tag) {
            case NumericKeyboardViewLeftArrow:
                currentTextField = nextTextFieldSelection;
                [self numericKeyboardView:(VS_NumericKeyboardView *)numericKeyboardView DidSelectArrowButton:(UIButton *)arrowButton];
                return;
            case NumericKeyboardViewRightArrow:
                currentTextField = nextTextFieldSelection;
                [self numericKeyboardView:(VS_NumericKeyboardView *)numericKeyboardView DidSelectArrowButton:(UIButton *)arrowButton];
                return;
            default:
                break;
        }
    }
4

1 に答える 1

2

cellForRowAtIndexPathは、表示されていないセルに対してnilを返します。それがおそらくあなたがその無限ループに入っている理由です。

参照:http ://developer.apple.com/library/ios/documentation/uikit/reference/UITableView_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006943-CH3-SW16

于 2013-02-28T16:39:50.463 に答える