2016-06-21 21 views
1

我有我的tableview單元格內的複選標記,以指示哪個單元格被點擊。而不是點擊單元格,按鈕將被點擊。我可以從每個單元格獲取信息並更改圖像,但問題是當我單擊一個單元然後單擊另一個單元格時,兩個單元格按鈕都會突出顯示。相反,我只想點擊最新的按鈕來突出顯示。一次只能突出一個按鈕。如何僅允許突出顯示一個圖像?

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 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]) 
    } 
} 

一個選擇

+0

工程,但是當我選擇,向下滾動,向後滾動,它被取消選擇 – manatee

+0

這是完全無關,只有一個按鈕被選中,如果它發生在這個'解決方案',我敢打賭它也發生在多個選擇? – Pieter

+0

您必須保持單元格的選中狀態,並在重新創建應該選擇的單元格時突出顯示覆選框 – Pieter

0

UITableView代表選擇下一個單元格按鈕之前取消最新的選擇按鈕的狀態,您將永遠只能有:

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

UITableViewDelegate有一個名爲方法func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath?

在這個函數中,你可以通過indexPathForSelectedRow獲得當前選中的單元格,它屬性爲UITableView,現在您可以取消選中最後一個選中的單元格

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