在 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 上的点击以转到不同的视图控制器。

好的,我不是在写代码,只是您需要遵循的步骤

  1. 从您的行和 headers 中删除您创建的转场。只需为要打开的控制器分配 SegueIdentifier,比如 SegueIdentifierForRowSegueIdentifierForSection.

  2. 由于在 tableview headers 中没有操作,您需要添加自定义操作,可能是 UIButtonUITapGestureRecognizer。您可以保留原样的单元格选择。要确定部分选择,您可以为每个部分设置 tag

  3. On Row CellSelection 使用标识符 SegueIdentifierForRow 手动初始化 ViewController,对于使用不同标识符 SegueIdentifierForSection[= 的部分也是如此33=].

按照上面的步骤,您应该可以完成所需的操作。

干杯。