我的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)
保留对所有按钮的引用。然后,当用户点击一个呼叫付款选择的方法时,取消选择所有这些方法,然后重新选择点击的那个(发件人)。
答案 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];
}