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



我有一个由UILabelUIButton组成的ViewController。 单击UIButton显示tableViewpopOver礼物。tableView的每个单元格代表不同的字体选项。

我想根据用户从tableViewCell中选择的字体更改UILabel的字体。 我如何实现这一点,因为我的UILabeltableView位于不同的 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 { ...

希望对您有所帮助!

最新更新