1

カスタムセルで作成された6行のtableViewがあります。

カスタム セルには、UILabel と UISwitch があります。メソッド「cellForRowAtIndexPath:」には、次のものがあります。

    static NSString *CellIdentifier = @"optionsCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    UISwitch *optionsSwitch = (UISwitch *)[cell viewWithTag:300];
    UILabel  *optionsLabel  = (UILabel *) [cell viewWithTag:200];

    NSLog(@"%@", optionsSwitch);
    NSLog(@"%@", optionsLabel);

tableView が (ストーリーボードから) 最初にインスタンス化されると、2 つのオブジェクトが正しく取得されます (テーブル ビューの最初の行にのみ結果を追加しています)。

ここに画像の説明を入力

しかし、reloadData メソッドを tableView に送信すると (UISwitch のステータスはプログラムで変更できるため、表示する前に tableview を更新します)、UISwitch が nil のときに UILabel を正しく取得します。

ここに画像の説明を入力

UILabel が機能し、UISwitch が機能しないのはなぜですか?

この問題に関する別の投稿で示唆されているように、UISizeClasses は有効になっていません。

ありがとう、コラード

4

1 に答える 1

1

おそらく、スイッチが変更されたときにそこから行番号を取得できるように、スイッチのタグをコードの別の場所で変更します。

実際には、タグをまったく使用する必要がないように、ビューへのアウトレットを持つカスタムセルが必要です。セルは、スイッチの変更を処理してモデルを更新するか、ビューコントローラーへのコールバックを呼び出す必要があります。

于 2015-04-04T14:41:48.013 に答える