1

2 つのセクションを持つテーブルがあります。最初のセクションのセグメント化されたコントロールは、2 番目のセクションに表示される行を変更します。私の問題は、セグメント化されたコントロールのボタンを押すたびに、行の順序と 2 番目のセクションに表示される行が不適切にシフトすることです。

ユーザーは、名前、バーコード、カメラで写真を撮るという 3 つの方法で商品をショッピング リストに追加できます。UISegmentedControlユーザーが使用する方法を選択できるように、3 つのボタンがあります。ユーザーが選択したセグメントに応じて、2 番目のセグメントのフィールドが変更され、そのメソッドに関連するセルが表示されます。

Section 0:
    0 row with segmented control showing name, barcode and camera buttons
Section 1:
    // button zero, name button
    0 row with textfield
    1 row with textfield 
or 
    // button 1, barcode button
    0 row with textfield
or 
    // button 2, camera button
    // shows camera view

各 UITextField にプレースホルダーを配置しました。

セグメント化されたコントロールのボタンがクリックされるpickOne:たびに、テーブルビューを更新するメソッドを呼び出します。そのメソッドでは、(1, 1) の NSRange で NSIndexSet を構築し、NSIndexSet をreloadSections:パラメーターとして UITableViewController のメソッドを呼び出します。

ビューが初めて表示されたときは問題ありませんが、ボタンを繰り返しクリックすると、セルの順序が変わります。button0 の 2 つの textField と新しい placeHolders を含むセルは、古いものに上書きされます。さらに悪いことに、ボタン 0 をクリックすると、2 つのセルのうちの 2 番目のセルしか表示されないことがあります。

私の詳細なコードはここで見ることができますhttp://pastebin.com/9GwMpCS9

4

2 に答える 2

0

あなたの問題はここにあると思います。

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    //....

        if(addMode == NAME) {
            if(indexPath.row == 0) {
                [cell addSubview:nameTextField];
            }
            else if(indexPath.row == 1) {
                [cell addSubview:categoryTextField];
            }
        }
        else if(addMode == BARCODE) {
            [cell addSubview:barcodeTextField];
        }
        else if(addMode == SCAN){

            //Scanning mode
        }
    }
    return cell;
}

これは、テーブルが常に 2 つのセクションを持っていることを示しているため、このメソッドは常にセクション 1 に対して呼び出されます。選択された入力タイプに関係なく、セルを作成またはキューから取り出して返します。addMode==SCAN の場合は常に、名前またはバーコードの addMode に対して以前に使用されたセルの 1 つをランダムにキューから取り出し、それを返します。

テーブルから SCAN ロジックを完全に削除するか、カメラの行を作成することをお勧めします。

後者が最適な UI だと思います。最初の 2 つのボタンを使用すると、2 番目のセクションで選択肢が表示されます。カメラの選択でそのパターンを維持する必要があります。カメラを呼び起こすボタンを表示するセルを用意するだけです。はい、2 番目のステップが追加されますが、ユーザーの動的パターンが確立されます。セクション 1 で入力タイプを選択し、セクション 2 で適切なセルを選択します。ユーザーは、セクション 2 のいずれかの行にアクセスする必要があるかどうかを毎回立ち止まって考える必要はありません。彼らはそれを自動的に行うべきです。

于 2010-03-30T16:13:16.207 に答える
0

いくつかの問題が見られます。

最初の大きな問題は、をバイパスしてセルにサブビューを追加していることですcontentView。事前定義されたスタイルのサブビューは、役割に応じてさまざまな部分に分割されます。編集コントロール、コンテンツ ビュー、アクセサリ ビューがあります。セルのビューに直接追加することはできますが、事前定義されたセルはコンテンツがコンテンツ ビューにあると想定しているため、奇妙な動作が発生します。

問題の原因は、セルが装飾されるたびにサブビューを追加しているが、それらを削除しないことだと思います。セルがキューから取り出された場合、すべてが割り当てられたかのように元の新しい状態に復元されるという保証はありません。削除されないカスタム アクセサリ ビューなどは、そのままにしておくことができます。私はそれが起こっていると確信しています。クリーンなはずのセルに視覚的なゴミを集めています。

于 2010-03-30T15:27:03.460 に答える