点击单元格附件
我有一个自定义单元格的UITableView。通常,当用户点击该单元格,它会触发该功能:点击单元格附件
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
//Segue to another view
}
如果这种观点,他们标记为完成,当他们返回的代码将添加标准检查附件的单元格。
当单元格没有完成时,我想要一个空的检查点,可以点击(我知道我可以添加一个自定义图像附件),点击允许用户跳过segue并快速标记单元格完成后。但我似乎无法使双方的工作:
- 轻敲细胞的主体应该调用didSelectRowAtIndexPath方法
- 轻敲附件视图(空复选标记)应该调用一组不同的代码。
我试过accessoryButtonTappedForRowWithIndexPath,但它似乎甚至没有被调用。
func tableView(tableView: UITableView, accessoryButtonTappedForRowWithIndexPath indexPath: NSIndexPath) {
//Shortcut code to change the cell to "finished"
}
是否有可能点击主体触发一组代码并点击附件视图触发另一个?如果是这样,怎么样?
您应该为您的自定义UITableViewCell添加一个UIButton。然后,您可以添加一个目标,这个按钮叫pressedFinished,说像cell.button.addTarget(self, action: "finishedPress:", forControlEvents: .TouchUpInside)
或pressedFinished的东西,那么你可以这样说:
func pressedFinished(sender:UIButton)
{
let location = self.tableView.convertPoint(sender.bounds.origin, fromView: sender)
let indexPath = self.tableView.indexPathForRowAtPoint(location)
//update your model to reflect task at indexPath is finished and reloadData
}
这通常不是一个伟大的实践,因为他们没有内在的使用标签含义。此外,映射到indexPath.row的标签只有在表格有一个部分时才会起作用。
另一种选择可能会使用UITableViewRowAction:
override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? {
let rowAction : UITableViewRowAction
if model[indexPath].finished
{
rowAction = UITableViewRowAction(style: .Normal, title: "Mark as Unfinished", handler: {(rowAction:UITableViewRowAction,indexPath:NSIndexPath)->() in
//mark as unfinished in model and reload cell
})
}else{
rowAction = UITableViewRowAction(style: .Normal, title: "Mark as Finished", handler: {(rowAction:UITableViewRowAction,indexPath:NSIndexPath)->() in
//mark as finished in model and reload cell
})
}
return [rowAction]
}
其Objective-C解决方案。 如果您添加了自己的accessoryButton
,那么将不会调用'accessoryButtonTappedForRowWithIndexPath'的tableviewDelegate
方法。 你应该做的是,为该方法创建一个UIButton
和addTarget
,然后将其作为accessoryButton
添加到tableViewCell
。还要将tag
的值设置为index path.row
,以便您了解哪个行被点击。
我选择,我想给一个完整的答案回答,以及我帮助了。但是,我从回答有点偏离,并希望分享这还有:
使附属视图出现/消失
我几个列表加载到同一个故事板表。有时列表应显示指标,其他时间则不需要配件。为此,我在故事板中添加了一个按钮,垂直居中,尾部= 0到正确的容器视图。然后我给它的宽度为0,并在我的代码中给这个约束一个IBOutlet。当我需要配件时,我只是简单地给它一个宽度。为了使它消失,我将其宽度设置回0。
配件和核心数据
配件是一种痛苦,因为如果用户检查过的东西然后关闭该应用程序,他们希望它被人记住。因此,对于每个更改,都需要将该单元状态保存在CoreData中。我添加了一个名为“状态”的属性,并在配件显示填满时给它一个“已选择”的值。
这也意味着,我必须按该属性检索列表时进行排序。如果你已经有了一个排序描述符,你现在需要几个。
但这里的有关手动添加一个按钮,像一个附件的东西......纲领性添加附件的是伟大的!它的尺寸没有拉伸和垂直居中。添加附件甚至可以调整细胞的主体。对我来说最重要的是,在某些情况下,表应该没有配件所以很高兴有它是一个简单的开关加载。没有办法添加配件图像视图并使其可点击? –
您可以设置按钮,是小区的accessoryView的,但你需要像我上述设定目标的方式相同。 AccessoryView是UITableViewCell上的一个读写UIView属性。你应该知道,如果设置accessoryView的设置accessoryType被忽略,因此,如果你想使用UITableViewCellAccessoryCheckmark在按钮的动作,你不得不重新装入电池,并设置accessoryView的为零和accessoryType到UITableViewCellAccessoryCheckmark和就没有办法因为UITableViewCellAccessoryCheckmark不响应水龙头,所以用户可以将该操作逆转 – beyowulf