2016-06-21 8 views
1

テーブルビューのセル内にチェックマークがあり、クリックされたセルが示されています。セルをクリックする代わりに、ボタンがクリックされます。各セルから情報を取得してイメージを変更できますが、問題をクリックしてもう一方をクリックすると、両方のセルボタンが強調表示されます。代わりに、私はクリックされた最新のボタンをハイライト表示したいだけです。一度に強調表示できるボタンは1つだけです。1つの画像のみをハイライト表示させるにはどうしたらいいですか?

func selected(sender: UIButton){ 
    let buttonTag = sender.tag 

    if (sender.selected) 
    { 
     sender.selected = false 
     print("none") 
    } 
    else 
    { 
     sender.selected = true 
     print(animal[buttonTag]) 


    } 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell: animalcell = animal.dequeueReusableCellWithIdentifier("cellanimal") as! animalcell 
    cell.check.addTarget(self, action: "selected:", forControlEvents: .TouchUpInside) 
    cell.check.tag = indexPath.row 

    cell.check.setImage(UIImage(named: "bttnnonhighlight"), forState: UIControlState.Normal) 
    cell.check.setImage(UIImage(named: "buttonhighlight"), forState: UIControlState.Selected) 
    cell.check.selected = false 
    previouslySelected = cell.check 
} 

答えて

0

すべてのボタンを参照してください。次に、ユーザーが支払選択メソッドを呼び出すときにタップすると、すべての選択が解除され、タップされたメソッド(送信者)が選択されます。

+0

にどのように私はすべてのボタンの参照を保持しますか?ボタンの数は、ユーザーごとに変わります。 – manatee

0

クリックしたものを覚えておいてから、それをチェックしてから、新しくクリックしたものを確認してください。

func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? { 
     // Cancel seleted status of lastest cell button 
    } 
+0

動作しますが、選択してスクロールしてスクロールバックすると、 – manatee

+0

は選択されていません。この「ソリューション」で発生した場合は、複数の選択でも発生しますか? – Pieter

+0

セルの選択状態を維持し、選択するセルを再作成するときにチェックボックスをハイライト表示する必要があります – Pieter

0

UITableViewデリゲートで次のセルのボタンを選択する前に、最新の選択ボタンの状態をキャンセルしています

func selected(sender: UIButton){ 
    if (sender != previouslySelected) { 
     previouslySelected.selected = false 
    } 
    let buttonTag = sender.tag 

    if (sender.selected) 
    { 
     sender.selected = false 
     print("none") 
    } 
    else 
    { 
     sender.selected = true 
     previouslySelected = sender 
     print(animal[buttonTag]) 
    } 
} 


この機能では、現在選択されているセルをindexPathForSelectedRowUITableViewのプロパティです。最後に選択したセルのチェックを外すことができます。

0

UITableViewDelegatefunc tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath?
という名前のメソッドを持っている:あなたは常に一つだけ選択

0

グローバル変数を作成します。BOOL selectedIndex。あなたのselected:方法

- (IBAction)selected:(UIButton *)button{ 
    UIView *view = button.superview; 
    while (view && ![view isMemberOfClass:[UITableViewCell class]]) { 
     view = view.superview; 
    } 
    UITableViewCell *cell = view; 
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 

    selectedIndex = indexPath.row; 
    [self.tableView reloadData]; 
} 

そして、あなたのtableView:willDisplayCell:方法

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ 
    BOOL shouldSetSelected = (selectedIndex == indexPath.row); 
    [cell.check setSelected:shouldSetSelect]; 
} 
関連する問題