0

テーブルビューに疑問があります。テーブルビューセルにラベルとスイッチを配置しました。スイッチの値をデフォルトで NO に設定しました。テーブル ビューがシミュレーターに読み込まれると、テーブル ビューに NO 値のスイッチが表示されます。ここで、スイッチ値を YES に選択しました。しかし、テーブル ビューは再利用可能なセル メソッド プロパティのデキューを使用します。テーブル ビューがスクロールされると、オブジェクトは毎回リロードされます。スイッチ値は NO または YES になりますか?

4

3 に答える 3

-1

セルが重複していないことを保証するには、次のコードを使用します

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

次のように :

for(UIView *v in [cell subviews])
{
    if([v isKindOfClass:[UILabel class]] ||[v isKindOfClass:[UISwitch class]])
        [v removeFromSuperview];
}
于 2012-10-21T08:44:24.583 に答える
-1

TableViewCells は、テーブル ビューがスクロールされると、必要に応じて破棄および作成されます。

セルが表示されている画面領域から出るときにセルが破棄されると、セルのサブビューであるスイッチ コントロールも破棄されます。

したがって、以前に設定したスイッチの 1 つにスクロールして戻ると、実際に表示されているのは、スイッチ ビューが追加された UITableViewCell の別のインスタンスであるため、スイッチ値が NO に戻ったように見えます。

必要なのは、各行の各スイッチの値を記憶する 3 番目の要素です。Core Data エンティティ情報のテーブルを表示している場合は、おそらく「アクティブ」などのエンティティのプロパティを定義できます。その場合、スイッチ値を変更するたびに、コア データ エンティティの「アクティブ」プロパティをスイッチ値に設定します。

-(UITableViewCell *)tableView:(UITableView)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...

    if(cell == nil)
    {
        // set switch control tag number (don't use 0)
    }

    // get switch control by tag number

    // pseudocode
    Engine *myEngine = [arrEngine objectAtIndex:indexPath.row];

    mySwitchControl.active = myEngine.active;

    ...
}

// when you change switch value, remember to update your core data entity value
-(void)updateSwitchValue:(BOOL) newValue
{
    // update value
}

それ以外の場合は、bool 値の NSMutableArray を使用して、各スイッチが YES または NO になる行を識別することができます。

// my header file (.h file)
@interface
{
    NSMutableArray *arrSwitchValues;
}

// my implementation file (.m file)
-(UITableViewCell *)tableView:(UITableView)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...

    if(cell == nil)
    {
        // set switch control tag number (don't use 0)
    }

    // get switch control by tag number

    // pseudocode
    BOOL switchVal = [arrSwitchValues objectAtIndex:indexPath.row];

    mySwitchControl.active = switchval;

    ...
}

// when you change switch value, remember to update your array
-(void)updateSwitchValue:(BOOL) newValue
{
    // update value
}

それが役立つことを願っています。

于 2012-10-21T08:01:11.547 に答える