我如何只允许突出显示一个图像?

时间:2016-06-21 07:50:08

标签: ios swift uitableview

我的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
}

5 个答案:

答案 0 :(得分:0)

保留对所有按钮的引用。然后,当用户点击一个呼叫付款选择的方法时,取消选择所有这些方法,然后重新选择点击的那个(发件人)。

答案 1 :(得分: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])
    }
}

您将始终只选择一个

答案 2 :(得分:0)

UITableView委托中选择下一个单元格按钮之前,取消最新选择的按钮状态:

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

答案 3 :(得分:0)

UITableViewDelegate有一个名为func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath?的方法

在此函数中,您可以通过indexPathForSelectedRow获取当前选定的单元格,它是UITableView的属性,现在您可以取消选中最后选择的单元格

答案 4 :(得分: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];
}