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

Posted

技术标签:

【中文标题】可以从其他 ViewController 类更改 UILabel 的字体【英文标题】:Its possible to change font of UILabel from other ViewController class 【发布时间】:2015-06-15 07:05:24 【问题描述】:

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

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

中的回归

【问题讨论】:

使用协议和委托或块或通知中心 @Mrug 你可以参考一些例子 看看这个code.tutsplus.com/tutorials/…和这个codewithchris.com/learn-swift-from-objective-c-part3 这实际上与字体无关,它与处理回调有关,您只需实现三件事中的任何一个,我更喜欢初始级别的协议和委托,它将允许您将回调给您的最初的 Viewcontroller 所以之后我想你已经知道该怎么做了,对吧? @Mrug 谢谢它会帮助我 【参考方案1】:

您可以使用委托。在你的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  ...

希望对你有帮助!

【讨论】:

以上是关于可以从其他 ViewController 类更改 UILabel 的字体的主要内容,如果未能解决你的问题,请参考以下文章

如何将变量从 ViewController 类传递给其他结构?

从不同的类更改 UIButton alpha

有没有办法从嵌入式 ViewController 更改 Tabbar 图像和操作?

从 Swift 中的其他类调用方法

从 viewController 更改 UIColor 以在 UIView 类中使用

从 UITableView 更改 viewController 时将可选值显示为“nil”