如何从 Swift 中的 ViewController 获取 UIView 子类实例

Posted

技术标签:

【中文标题】如何从 Swift 中的 ViewController 获取 UIView 子类实例【英文标题】:How to get a UIView subclass instance from its ViewController in Swift 【发布时间】:2017-06-23 13:16:31 【问题描述】:

对于这个基本问题,我很抱歉,我只是很难找到答案。我有一个子类 UIView 的视图类,并且有一些基本方法,显然是 draw() 和其他方法。在我的 Main.storyboard 中,我添加了一个 UIView 元素并将其类属性设置为我创建的这个视图类。类是这样的:

class KeyboardView: UIView 
    // local variables ...

    override function draw(_ rect: CGRect) 
        ...
    

    class changeKord() 
        ...
    

    // other methods ...

我想从我的主 ViewController 类中引用在运行时实际创建的实例。当我在代码中为此 UIView 创建一个插座时,我需要实例化它,并且我无法访问类中的实例方法。有什么方法可以获取从 outlet 变量创建的实际实例吗?还是我错过了什么?

我所做的是在类型为 KeyboardView 的 View Controller 类之外创建一个全局变量,并在 KeyboardView 子类的 draw 方法中将该全局变量设置为 self,这允许我直接引用该实例。哪个有效,但看起来真的很hacky..有没有办法从 IBOutlet 引用中偶然获取实例?

【问题讨论】:

【参考方案1】:

我只是把这个简单的例子放在一起,请注意屏幕截图中 IBOutlet 的类型是 CustomView。

我所做的是在情节提要中添加 UIView,然后将属性检查器中的类更改为 CustomView,然后创建 IBOutlet。然后使用了正确的类型,因此我可以引用视图的自定义属性和功能。

如果您之前创建了插座,您可以更新插座中的类型,只要它与属性检查器中的类匹配即可。

【讨论】:

谢谢!!这就是我错过的:(

以上是关于如何从 Swift 中的 ViewController 获取 UIView 子类实例的主要内容,如果未能解决你的问题,请参考以下文章

Swift 4 - 特定视图控制器状态栏样式不变

如何从 Swift 3 中的闭包中返回

iOS 应用程序在 swift 中关闭视图后冻结

Swift - 如何从 mapViewkit 中的 API 数据创建要使用的局部变量

如何从 iOS 中的流中接收数据(swift)

如何从 Swift 中的主线程中关闭