ios - 将 ViewController 的 View 分配给自定义 View 类不会显示自定义 View 属性

标签 ios swift uiview uiviewcontroller

下面的代码允许我访问 WalkthroughView 的 testView 属性。

class WalkthroughViewController: UIViewController{

    var walkthroughView = WalkthroughView()

    override func loadView() {
        self.view = walkthroughView
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        walkthroughView.testView.backgroundColor = .cyan
    }
}

以下代码不允许我访问 WalkthroughView 的 testView 属性。

class WalkthroughViewController: UIViewController{

    override func loadView() {
        self.view = WalkthroughView()
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        //cant access the .testView
        self.view.testView.backgroundColor = .cyan //this doesn't compile
    }
}

这怎么可能?第一个示例创建了一个 WalkThroughView 对象,它被分配给 self.view。稍后调用此对象允许我更改它的属性。第二个示例将 WalkthroughView() 分配给 ViewController 的 View ,使用这种方法(据我所知)不可能访问 WalkthroughView 属性。

为什么第二种方法不允许我访问 WalkthroughView testView 属性?

最佳答案

在您的第一个示例中,您定义了一个 WalkThroughView 类型的实例变量 walkThroughView。然后,您通过具有特殊类型的新变量引用它。

在您的第二个示例中,您创建了一个新的 WalkthroughView 实例并将其存储到 View Controller 的 View 属性中,然后通过现有 View 属性引用它。编译器不知道 self.view 包含 WalkThroughView 类型的变量。您需要对其进行强制转换才能使其合法。

if let walkthroughView = self.view as? WalkThroughView {
   walkthroughView.testview.backgroundColor = .cyan
}

关于ios - 将 ViewController 的 View 分配给自定义 View 类不会显示自定义 View 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41433291/

相关文章:

ios - 我不能在 switch 内沮丧吗? ( swift 3)

xcode - 如何使用 XCTest 在 Xcode 中测试 Swift 文件而无需构建整个应用程序?

ios - Swift 4 - NSURLComponents 设置带有正斜杠的密码

Swift:即使将动态设置为 false, Sprite 节点在碰撞期间仍然是动态的?

ios - 创建一个具有前导/尾随褪色边缘的 UIView

ios - WKWebView - 组件失败时不调用 didFailProvisionalNavigation

iphone - HTTP "Content-Disposition: attachment"和在 iOS 网络浏览器上下载文件

ios - HTTPBody - Swift POST 请求 - 推特

ios - Crossfade 多个 UIViews 没有背景通过 alpha 偷看?

C# Monotouch/Xamarin.iOS - 可滚动的 UIView