我有一个由UILabel
和UIButton
组成的ViewController。 OnClick UIButton
一个显示popOver
的tableView
。 tableView
的每个单元格代表不同的字体选项。
我想根据用户从UILabel
中选择的字体来更改tableViewCell
的字体。我如何实现此目标,因为我的UILabel
和tableView
在不同的viewController类中。
请帮我。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var row = indexPath.row
// How to update label from here
}
编辑:我喜欢这个答案,但不能理解为它返回目标c update ViewController label text from different view
最佳答案
您可以使用委托。在您的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 { ...
希望能帮助到你!