6

PopoverController 内の UITableView に問題があります。セルに触れると、didSelectRowAtIndexPath 関数が呼び出され、セルの accessoriesType が変更されます。単純化された例:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [self.listItems objectAtIndex:indexPath.row];
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
    [self.tableView reloadData];
    [self.popoverController dismissPopoverAnimated:YES];
}

セルはチェックされていますが、テーブルビューには表示されません。青いチェックマークが表示されません。ただし、セルのタッチ状態では、チェックマークが白く表示されます (セルの背景は灰色になります)。ただし、デフォルト状態では表示されません。

私のチェックマークがデフォルトの状態で表示されない理由がわかりましたか?

ありがとう、

編集:セルのスクリーンショットを追加accessoryType = UITableViewCellAccessoryCheckmark

ここに画像の説明を入力

4

8 に答える 8

11

これは、グローバル ティント カラーを白に変更したときに発生しました。気付いたら、UITableView に入り、このテーブルだけの色合いをローカルで変更しました。修理済み。

于 2014-01-08T01:47:10.807 に答える
3

私は答えを試しました ジャッキーボーイ - 助けにはなりませんでした。しかし、選択解除には何かがありました...

そのため、チェックマーク アクセサリを追加する前に、 didSelectRowAtIndexPath: でセルの選択を解除しようとしました。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

   [tableView deselectRowAtIndexPath:indexPath animated:YES];
   UITableViewCell* selectedCell = [tableView cellForRowAtIndexPath:indexPath];

   if (row != _selectedRow) {

       if (selectedCell.accessoryType == UITableViewCellAccessoryNone) {

          selectedCell.accessoryType = UITableViewCellAccessoryCheckmark;
          _selectedRow = row;

       } else if (selectedCell.accessoryType == UITableViewCellAccessoryCheckmark) {

          selectedCell.accessoryType = UITableViewCellAccessoryNone;
       }
       [tableView reloadData];
   }

}

そして、私にとってはついに機能しました-素敵な暗いチェックマークがセルにはっきりと見えるようになりました!

もちろん、cellForRowAtIndexPath には一部があります。arexx の回答で説明されているものと同様です。

于 2012-11-22T06:19:49.223 に答える
2

チェックマークをアクセサリとして設定して行をリロードした後、チェックマークが表示されない(ただし、行が選択されたときに白で表示される)という同様の問題がありました。この問題をテストしたところ、チェックマークがセルに常に存在し、白地に白であることがわかりました。

問題についての私の理解では、セルをリロードするように要求すると (チェックマークを付けて表示できるようにするため)、既存のセルは再利用キューに入れられますが、その時点では選択された状態になっています (ユーザーはそれを選択しました)。セルが再利用キューから戻ってきて、tableView:cellForRowAtIndexPath でセルを再構成しても、セルはまだ選択された状態にあり、選択されているため、アクセサリは目に見える色ではなく白で設定されます。

これを修正するために、tableView:cellForRowAtIndexPath に行を追加して、セルが選択されないようにしました。新しいセルが表示されると、アクセサリが常に表示されるようになりました。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Get a reusable cell - this only works with Storyboard prototype cells 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell"];

    // THE MAGIC BIT
    // Force the cell to not be in a selected state.    
    cell.selected = NO;
    // END MAGIC BIT

    if (indexPathIsPathOfSelectedRow) {
         // This is the selected cell, so show the checkmark accessory.
         cell.accessoryType = UITableViewCellAccessoryCheckmark;
    } else {
         // In case we're reusing a cell that previously showed a checkmark, clear it.
         cell.accessoryType = UITableViewCellAccessoryNone;
    }

    return cell;
}
于 2012-11-21T16:01:02.137 に答える
0

iOS 6.1 で実行すると、ほとんど白い背景に白いチェック マークが付いたセルが表示されます。これは、チェック マーク アクセサリを描画するコードが、セルが強調表示された状態にあると認識し、通常の青色でチェック マークを描画するのではなく、白で描画するために発生しているようです。

セルの選択状態を設定しても機能しませんでしたが、アクセサリ タイプを設定する直前に強調表示された状態を設定することはできました。次のように設定すると、常に濃い青色のチェック マークが付きます。

cell.highlighted = NO;
if (checked)
    self.accessoryType = UITableViewCellAccessoryCheckmark;
else
    self.accessoryType = UITableViewCellAccessoryNone;
于 2013-05-28T17:28:39.293 に答える
0
-(UIImageView *)checkmarkImg{
    UIImage *image = [[UIImage imageNamed:@"ic_check_black_24dp.png"] changeColor:CLR_BUY];
    UIImageView *checkmark = [[UIImageView alloc] initWithImage:image];
    return  checkmark;
}

        cell.accessoryView = [self checkmarkImg];
于 2014-12-19T16:45:30.343 に答える
0

リロードしているUITableViewため、理論的にはセルが再作成され、今回はチェックマークがありません。以下をせよ:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [self.listItems objectAtIndex:indexPath.row];
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
    [self.popoverController dismissPopoverAnimated:YES];
}
于 2012-06-06T08:20:06.343 に答える