我有一个tableview设置,每行都有自己的自定义节标题。这是通过故事板中的原型单元完成的。我对一行的click事件有一个视图控制器的segue。我通过在故事板上拖动来实现这一点。
但我希望我的节标题可以转换为不同的控制器。我将ctrl从我的标题原型单元格拖动到故事板上的视图控制器。
结果是,单击该行并单击该行的标题会将我带到同一个视图控制器。
标题似乎与行相关联。有没有办法解决?我可以给我的segues标识符并覆盖seg的准备吗?或者是否可以在节标题上单独使用单击事件作为行的其余部分?
更新 我必须尝试按如下方式实现它:
我从我的vc拖动到故事板中的目标vc,并给seg一个标识符。
在我的viewForHeaderInSection中,我添加了以下内容:
let tapper = UITapGestureRecognizer(target: self, action:Selector("seg"))
tapper.cancelsTouchesInView = false
headerCell.addGestureRecognizer(tapper)
return headerCell
我的seg func只使用我设置的标识符执行一个seg,如上所述。
func seg(){
self.performSegueWithIdentifier("feedToMembersDetailed", sender: self)
}
在我的overridePrepareForSeg中,我检查标识符并调用适当的方法:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "feedToMembersDetailed"){
//getting in here
getMembersContentFromRow(segue)
}
... extra conditions
}
最后我的getMembersContentFromRow看起来如下:
func getMembersContentFromRow(segue : UIStoryboardSegue){
var membersDetailed = segue.destinationViewController as! MembersDetailedController
if let indexPath = self.feedTableView.**indexPathForSelectedRow()**{
if let selectedId = self.newsFeed?[indexPath.section].authorId{
Prefs.followedId = selectedId.toInt()!
}
println("setting postAuthorPic as \(self.newsFeed?[indexPath.section].authorPic)")
membersDetailed.postAuthorPic = self.newsFeed?[indexPath.section].authorPic
membersDetailed.postAuthorID = self.newsFeed?[indexPath.section].authorId
membersDetailed.postAuthor = self.newsFeed?[indexPath.section].author
}
else{
//getting in here. I need a method that can retrieve indexPath for me
println("could not get selected row")
}
}
答案 0 :(得分:1)
您需要实现viewForHeaderInSection:
方法并将UITapGestureRecognizer
添加到视图中,该视图将作为标题视图重新调整。然后,您可以处理表格节标题上的点击以转到不同的View Controller。
答案 1 :(得分:1)
好的就是,我不是在编写代码,只是你需要遵循的步骤
从行和标题中删除您创建的segues。只需为要打开的控制器分配SegueIdentifier,例如 SegueIdentifierForRow 和 SegueIdentifierForSection 。
由于tableview标头中没有操作,因此您需要添加自定义操作可能是UIButton
或UITapGestureRecognizer
。细胞选择你可以保持原样。要确定部分选择,您可以为每个部分设置tag
。
On Row CellSelection通过使用标识符 SegueIdentifierForRow 手动初始化ViewController,对于使用不同标识符 SegueIdentifierForSection 的部分也是如此。
按照上面的说法你应该能够做什么。
干杯。