我有一个带自定义单元格的UITableView。通常当用户点击单元格时,它会触发此功能:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
//Segue to another view
}
如果在该视图中他们将单元格标记为已完成,则返回时代码将添加标准检查附件。
当单元格没有完成时,我想要一个可以点击的空检查(我知道我可以添加自定义图像附件),点击允许用户跳过segue并快速将单元格标记为完了。但我似乎无法兼顾:
我已经尝试过accessoryButtonTappedForRowWithIndexPath但它似乎甚至没有被调用。
func tableView(tableView: UITableView, accessoryButtonTappedForRowWithIndexPath indexPath: NSIndexPath) {
//Shortcut code to change the cell to "finished"
}
是否可以单击主体触发一组代码并单击附件视图触发另一组代码?如果是这样,怎么样?
答案 0 :(得分:1)
它是Objective-C解决方案。
当您添加自己的accessoryButton
时,不会调用'accessoryButtonTappedForRowWithIndexPath'的tableviewDelegate
方法。
您应该做的是,为该方法创建UIButton
和addTarget
,然后在accessoryButton
上将其添加为tableViewCell
。同时将tag
值设置为按钮index path.row
,以便您知道点击了哪一行。
答案 1 :(得分:1)
您应该将UIButton添加到自定义UITableViewCell。然后,您可以通过说cell.button.addTarget(self, action: "finishedPress:", forControlEvents: .TouchUpInside)
之类的内容为名为pressedFinished的按钮添加目标
或者什么然后在pressFinished你可以说如下:
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]
}
答案 2 :(得分:0)
我选择了我认为给出了彻底答案的答案,这帮助了我。但是,我偏离了这个答案,并希望分享这个:
使附件视图显示/消失
我将多个列表加载到同一个storyboard表中。有时列表应显示指示符,有时则不需要附件。为此,我在故事板中添加了一个按钮,垂直居中,尾随= 0到右侧容器视图。然后我给它宽度为0,并在我的代码中给了该约束一个IBOutlet。当我想要配件时,我只是给它一个宽度。为了使它消失,我将其宽度设置回0。
附件和核心数据
配件有点痛苦,因为如果用户检查某些东西然后关闭应用程序,他们希望它会被记住。因此,对于每个更改,您需要在CoreData中保存该单元格状态。我添加了一个名为" state"并给它一个"选择的值#34;当配件出现填充时。
这也意味着我必须在检索列表时按该属性排序。如果您已经有了排序描述符,那么现在需要几个。