在 header 部分与在 table 视图行上分开 segue
separate segue on section header as on table view row
我有一个表格视图设置,其中每一行都有自己的自定义部分 header。这是通过故事板中的原型单元完成的。我在一行的点击事件上有一个视图控制器。我通过在故事板上按住 ctrl 键拖动来实现的。
不过,我希望我的部分 header 转到另一个控制器。我 ctrl 从我的 header 原型单元格拖到故事板上的视图控制器。
结果是单击该行和单击该行的 header 都将我带到同一个视图控制器。
header 似乎链接到该行。有没有办法解决?我可以提供我的 segues 标识符并覆盖 prepare for seg 吗?或者是否可以在 header 部分作为行的其余部分单独单击事件?
更新:
我必须尝试按如下方式实现它:
我用 ctrl 从我的 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")
}
}
您需要实施 viewForHeaderInSection:
方法并将 UITapGestureRecognizer
添加到将重新调整为 header 视图的视图。然后,您可以处理 table 部分 header 上的点击以转到不同的视图控制器。
好的,我不是在写代码,只是您需要遵循的步骤
从您的行和 headers 中删除您创建的转场。只需为要打开的控制器分配 SegueIdentifier,比如 SegueIdentifierForRow 和 SegueIdentifierForSection.
由于在 tableview headers 中没有操作,您需要添加自定义操作,可能是 UIButton
或 UITapGestureRecognizer
。您可以保留原样的单元格选择。要确定部分选择,您可以为每个部分设置 tag
。
On Row CellSelection 使用标识符 SegueIdentifierForRow 手动初始化 ViewController,对于使用不同标识符 SegueIdentifierForSection[= 的部分也是如此33=].
按照上面的步骤,您应该可以完成所需的操作。
干杯。
我有一个表格视图设置,其中每一行都有自己的自定义部分 header。这是通过故事板中的原型单元完成的。我在一行的点击事件上有一个视图控制器。我通过在故事板上按住 ctrl 键拖动来实现的。
不过,我希望我的部分 header 转到另一个控制器。我 ctrl 从我的 header 原型单元格拖到故事板上的视图控制器。
结果是单击该行和单击该行的 header 都将我带到同一个视图控制器。
header 似乎链接到该行。有没有办法解决?我可以提供我的 segues 标识符并覆盖 prepare for seg 吗?或者是否可以在 header 部分作为行的其余部分单独单击事件?
更新: 我必须尝试按如下方式实现它:
我用 ctrl 从我的 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")
}
}
您需要实施 viewForHeaderInSection:
方法并将 UITapGestureRecognizer
添加到将重新调整为 header 视图的视图。然后,您可以处理 table 部分 header 上的点击以转到不同的视图控制器。
好的,我不是在写代码,只是您需要遵循的步骤
从您的行和 headers 中删除您创建的转场。只需为要打开的控制器分配 SegueIdentifier,比如 SegueIdentifierForRow 和 SegueIdentifierForSection.
由于在 tableview headers 中没有操作,您需要添加自定义操作,可能是
UIButton
或UITapGestureRecognizer
。您可以保留原样的单元格选择。要确定部分选择,您可以为每个部分设置tag
。On Row CellSelection 使用标识符 SegueIdentifierForRow 手动初始化 ViewController,对于使用不同标识符 SegueIdentifierForSection[= 的部分也是如此33=].
按照上面的步骤,您应该可以完成所需的操作。
干杯。