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

我想根据用户从UILabel中选择的字体来更改tableViewCell的字体。我如何实现此目标,因为我的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

最佳答案

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


希望能帮助到你!

10-07 21:58