我有一个由UILabel
和UIButton
组成的ViewController。 单击UIButton
显示tableView
的popOver
礼物。tableView
的每个单元格代表不同的字体选项。
我想根据用户从tableViewCell
中选择的字体更改UILabel
的字体。 我如何实现这一点,因为我的UILabel
和tableView
位于不同的 viewController 类中。
请帮助我。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var row = indexPath.row
// How to update label from here
}
编辑:我喜欢这个答案,但无法理解它在目标c更新视图中的返回 视图控制器标签文本 来自不同视图
您可以使用委托。在您的 popover
Swift 文件中创建这样的协议:
protocol PopoverDelegate {
func didSelectFont(font: UIFont)
}
在您的popover
类中创建新创建的协议的此类实现:
class popoverviewcontroller : UITableViewController {
var delegate: PopoverDelegate?
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var row = indexPath.row
// How to update label from here
delegate.didSelectFont(youFontHere)
}
}
现在,在主视图控制器中,如果要以编程方式显示popover
,则应将弹出框的delegate
属性设置为 self
。如果您要从故事板呈现弹出框,只需处理 segue:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
let destination = segue.destinationViewController as! popoverviewcontroller
destination.delegate = self
}
现在实现委托方法:
func didSelectFont(font: UIFont) {
//Update label's font
}
当然,不要忘记将委托添加到主视图控制器:
class mainViewController: UIViewController, PopoverDelegate { ...
希望对您有所帮助!