从PopOver更改Label的文本

时间:2015-08-23 17:35:08

标签: ios swift

我有一个主视图,它有一个名为timeLabel的标签和一个调用弹出视图的按钮。

在弹出视图中,我可以选择一个时间(小时和分钟),当我选择时,我希望标签文本立即更改为所选小时(标签具有初始值:“22:00”)。

我尝试做的是在主视图中创建一个更改标签文本的函数:

func setNotiTimeHour(hour: Int) 
    var time = self.notiTimeLabel.text!.componentsSeparatedByString(":") //ERROR 

    var newTime = String(hour) + ":" + time[1]

    self.notiTimeLabel.text = newTime
}    
func setNotiTimeMin(min: Int) {
    var time = self.notiTimeLabel.text!.componentsSeparatedByString(":") //ERROR

    var newTime = time[0] + ":" + String(min)

    self.notiTimeLabel.text = newTime
}

然后当小时或分钟发生这样的变化时,我试着调用这些函数:

SettingsTableViewController().setNotiTimeHour(Int(hours))
SettingsTableViewController().setNotiTimeHour(Int(minutes))

当我像这样调用函数时,我收到一条错误消息:“致命错误:在展开Optional值时意外发现nil”

我认为这意味着标签没有价值。

为什么我会收到此错误,是否有其他方法可以更改标签的文字?

1 个答案:

答案 0 :(得分:1)

SettingsTableViewController()创建一个新的视图控制器。它不使用您已有的实例。这就是标签为nil的原因。

您需要将popover控制器提交给现有视图控制器,将其保存在属性中,然后调用该控制器。您可能希望为此创建委托协议,以便可以从SettingsTableViewController以外的其他视图控制器显示此popover类。