如何通过 prepareForSegue 更改按钮的色调

How can I change tint color of a button via prepareForSegue

我有两个 viewController,它们与同一个 mapViewController 有连接。所以我试图改变地图上工具栏按钮的色调,但当然它说错误为零。还有另一种方法可以做到这一点。因为我需要告诉编译器,如果 segue 来自 tableViewController,则将条形按钮设为白色 "As if not selected",如果 segue 是从 mainViewController 发送,则将条形按钮设为黄色。

这是表格视图代码

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if segue.identifier == "locationView"{

        let mapVC:MapViewController = segue.destinationViewController as! MapViewController
        mapVC.pinCoordinate = coordinate
        mapVC.snippetTitle = caseTitleOnLocation
        mapVC.snippetDescription = caseDescriptionOnLocation
        mapVC.addLocation.tintColor = UIColor.whiteColor()  //error

这是mainViewController代码

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if segue.identifier == "rescueMap"{
        let mapVC:MapViewController = segue.destinationViewController as! MapViewController
        mapVC.addLocation.tintColor = UIColor.yellowColor()  //error
    }

您出现错误的原因是您试图在一个尚不存在的视图上设置一个值。

你可以在mapViewController中创建一个UIColor()变量,然后传递你想要的颜色

例如

在mapViewController中

class mapViewController{

   var barColor : UIColor!

   override func viewDidLoad(){
     self.toolbar.barTintColor = barColor
   }
}

在mainViewController中

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if segue.identifier == "rescueMap"{
        let mapVC:MapViewController = segue.destinationViewController as! MapViewController
        mapVC.barColor = UIColor.yellowColor() 
    }

你会明白的。

这是个问题,因为您使用的是未在视图中初始化的栏。所以首先初始化地图 view/Toolbar 以更改色调。