2012-06-06 10 views
6

PopoverController内のUITableViewに問題があります。 セルに触れると、didSelectRowAtIndexPath関数が呼び出され、セルaccessoryTypeが変更されます。例を簡素化:Checkmarkが表示されていないUITableViewCell

- (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

enter image description here

+0

あなたが入れなければならないデフォルト状態cell.accessoryType = UITableViewCellAccessoryCheckmark;内部 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPathメソッドです。 –

+0

はい私はそれを入れて、それは動作しています。 – alexmngn

+0

デフォルトでは動作していますが、表示されていないものは –

答えて

0

あなたはUITableViewので、理論的には、細胞が再作成され、チェックマークなしでこの時間をリロードしていると、セルのために、スクリーンショットを追加します。次の操作を行います。

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

しかし、私は再読み込みする必要があります... – alexmngn

+0

十分に公正な、それから何とかその特定のセルをマークする必要があります。したがって、 'UITableView'が再ロードされると、チェックマークはそこに残ります。あなたは 'indexPath'への参照を保持することができ、' cellForRowAtIndex'にはチェックの世話をします。 – Peres

+0

これは問題ではありません。私の 'cellForRowAtIndexPath'では、必要に応じてチェックマークを付けて追加します。私の問題は、機能ではなくディスプレイ上にある。 – alexmngn

2

Iアクセサリとして設定チェックマークを持つ行を再ロードした後に、チェックマークが表示されない(しかし、行を選択したときに白に見えるであろう)、同様の問題がありました。問題の周りのテストで、私はチェックマークがセルに常に存在することを発見しました、それは単なるホワイトオンホワイトです。

問題を理解したところでは、セルを再ロードして(チェックマークで表示できるようにする)、既存のセルは再利用キューに置かれますが、その時点では選択されています状態(ユーザがそれを選択したため)。セルが再利用キューから戻ってきて、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; 
} 
3

私は答えを試しました。ジャッキーボーイ - 助けてくれませんでした。

- (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]; 
    } 

}

そして、私のためにそれが働いた:チェックマークアクセサリを追加する前に:しかし、何かが選択解除にあった...

だから私はdidSelectRowAtIndexPathでセルの選択を解除しようとしましたついには、暗いチェックマークがセルにはっきりと見えるようになりました!

もちろん、cellForRowAtIndexPathには次のような部分があります:arexxの答えに記述されているのと似ています。

0

iOS 6.1で動作しているのは、ほぼ白い背景に白いチェックマークが付いたセルです。チェックマークのアクセサリを描画するコードでは、セルが強調表示されていると考えられるため、チェックマークを通常の青色で描画するのではなく、白で描画します。

セルの選択状態を設定することはできませんでしたが、アクセサリタイプを設定する直前にハイライト状態を設定しました。次のような場所で、私は常に濃い青のチェックマークを取得します。

cell.highlighted = NO; 
if (checked) 
    self.accessoryType = UITableViewCellAccessoryCheckmark; 
else 
    self.accessoryType = UITableViewCellAccessoryNone; 
+0

'動作しません。' '' '' '' '' '' ' – Gank

0

あなたがデータをリロードしたい場合、あなたはrowIndexにのような単一選択のためのいくつかの変数のidを選択し、次に

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    //check index 
    if (rowIndex==indexPath.row) 
     {cell.accessoryType = UITableViewCellAccessoryCheckmark; 
     } 
     else{ 
      cell.accessoryType = UITableViewCellAccessoryNone; 
     } 
} 

おかげで保存する必要があります。

7

これは、グローバル色合いの色を白に変更したときに起こったことです。私が気付くと、私はUITableViewに入り、このテーブルの色合いをローカルに変更しました。一定。

+0

これは私の問題を解決するのに役立ちました。他の誰かがこの問題を抱えていて、グローバルな色合いを維持したい場合は、TableViewクラスのviewDidLoad()で色合いを変更してください: self.view.tintColor = UIColor.blackColor – Jordan

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]; 
2

私は最も愚かな理由でした。私はストーリーボードでテーブルビューを作成しました。サイズが5.5インチのビューコントローラとはレイアウト制約を適用するのを忘れていました。

その後、私は4インチの携帯電話で起動しました。テーブルビューの幅が電話画面の幅より大きかったため、付属品の表示が見えないことを除いてすべてうまく見えました。私の間違いを知るには3時間かかりました。

関連する問題