如何将按钮标题传递给Swift中的下一个视图控制器

时间:2015-02-14 19:00:37

标签: ios swift uibutton segue viewcontroller

我在viewDidLoad的循环中定义了几个按钮。它们位于内容视图中,位于滚动视图中。

    for var i:Int = 0; i < colleges.count; i++ {

        let collegeButton = UIButton.buttonWithType(UIButtonType.System) as UIButton
        collegeButton.frame = CGRectMake(0, 0, self.contentView.frame.size.width, 30)
        collegeButton.center = CGPoint(x: self.contentView.center.x, y: 30 * CGFloat(i) + 30)
        collegeButton.setTitle(sortedColleges[i], forState: UIControlState.Normal)
        collegeButton.setTitleColor(UIColor.darkGrayColor(), forState: UIControlState.Normal)
        collegeButton.titleLabel?.font = UIFont(name: "Hiragino Kaku Gothic ProN", size: 15)
        collegeButton.addTarget(self, action: "collegeSelected:", forControlEvents: UIControlEvents.TouchUpInside)
        self.contentView.addSubview(collegeButton)
    }

如您所见,每个按钮的标题是根据先前定义的字符串数组设置的。每当选择一个按钮时,就会调用一个segue移动到一个嵌入导航控制器的表视图。

我需要将导航控制器标题设置为与特定按钮标题相同。

以下是我尝试过的一些事情:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var destViewController:videosTableView = segue.destinationViewController as videosTableView
    //destViewController.title = collegeButton.titleLabel?.text

    //var buttonTitle = sender.titleLabel?.text
    //destViewController.title = buttonTitle
}

评论的行是失败的尝试。

我也尝试过按下按钮时调用的动作函数:

func collegeSelected(sender: UIButton!) {

    self.performSegueWithIdentifier("goToTableView", sender: self)

    //Set navigation title of next screen to title of button
    var buttonTitle = sender.titleLabel?.text
    println(buttonTitle)

}

使用发件人获取按钮标题有效,但我不知道如何将其传递给下一个视图控制器。

非常感谢能够提供帮助的任何人。

1 个答案:

答案 0 :(得分:1)

在按钮功能中,将按钮作为segue的发送者传递:

func collegeSelected(sender: UIButton!) {
    self.performSegueWithIdentifier("goToTableView", sender: sender)
}

然后在prepareForSegue中,从发件人(即按钮)获取按钮标题:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let destViewController = segue.destinationViewController as videosTableView

    if let buttonTitle = (sender as? UIButton)?.titleLabel?.text {
        destViewController.title = buttonTitle
    }
}