在表格视图行上分隔节标题上的segue

时间:2015-10-02 09:04:11

标签: ios swift uitableview segue sections

我有一个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")
        }
    }

2 个答案:

答案 0 :(得分:1)

您需要实现viewForHeaderInSection:方法并将UITapGestureRecognizer添加到视图中,该视图将作为标题视图重新调整。然后,您可以处理表格节标题上的点击以转到不同的View Controller。

答案 1 :(得分:1)

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

  1. 从行和标题中删除您创建的segues。只需为要打开的控制器分配SegueIdentifier,例如 SegueIdentifierForRow SegueIdentifierForSection

  2. 由于tableview标头中没有操作,因此您需要添加自定义操作可能是UIButtonUITapGestureRecognizer。细胞选择你可以保持原样。要确定部分选择,您可以为每个部分设置tag

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

  4. 按照上面的说法你应该能够做什么。

    干杯。