可以从其他 ViewController class 更改 UILabel 的字体

Its possible to change font of UILabel from other ViewController class

我有一个 ViewController,它由 UILabelUIButton 组成。 OnClick UIButton 显示 popOver 显示 tableViewtableView 的每个单元格代表不同的字体选项。

我想根据用户从 tableViewCell 中选择的字体更改 UILabel 的字体。我如何实现这一点,因为我的 UILabeltableView 处于不同的 viewController class.

请帮助我。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
   var row = indexPath.row
   // How to update label from here
}

Edit :我喜欢这个答案,但无法理解 objective c update ViewController label text from different view

中的 return

您可以使用委托。在您的 popover Swift 文件中创建这样的协议:

protocol PopoverDelegate {
    func didSelectFont(font: UIFont)
}

在您的 popover class 中创建新创建协议的此类实现:

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 { ...

希望对您有所帮助!