【问题标题】:Found nil when accessing an outlet访问插座时发现 nil
【发布时间】:2018-01-17 05:55:53
【问题描述】:

我在情节提要中创建了一个containerView,我确实 cntrl 拖动到他的视图控制器并创建了一个 IBOutlet。

尝试访问此插座时出现错误

打开包装时发现 nil。

class NavigationController: UIViewController {

    @IBOutlet weak var containerView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let storyboard = UIStoryboard(name: "Main", bundle: nil)

        controller1  = storyboard.instantiateViewController(withIdentifier: "ViewController") as! ViewController

        controller1.delegate=self

        self.containerView.addSubview(controller1.view)
    }
}

我可以确认它已连接,因为我看到了插座的点,当在编辑器上触摸它时,它会在情节提要上闪烁。

尝试过清理、删除和其他任何操作。

尝试加载viewWillAppear(_ animated: Bool) 会得到相同的结果。

【问题讨论】:

  • 如何创建控制器?
  • 哪一个?拿着容器的人?它是出现在情节提要中的第一个视图(具有初始视图控制器箭头)
  • containerViewself.view的子视图还是顶层对象?顺便说一句:你不需要加载Main.storyboard。你可以简单地使用self.storyboard
  • 检查过还是解决了?

标签: ios swift storyboard iboutlet


【解决方案1】:

试试这个

我的出口:

@IBOutlet weak var containerView: UIView!

我的故事板:- VC 与 ContainerView

StoryBoard : - VC 被添加到 ContainerView

为要添加的 ViewController 创建一个对象

private lazy var FirstObject: VC1 =
    {
        // Instantiate View Controller
        let viewController = self.storyboard?.instantiateViewController(withIdentifier: "VC1") as! VC1
        
        // Add View Controller as Child View Controller
        self.addChildViewController(viewController)
        return viewController
    }()

创建将在容器视图中添加 VC 对象的函数

private func add1(asChildViewController viewController: UIViewController)
    {
        // Configure Child View
        viewController.view.frame = CGRect(x: 0, y: 0, width: self.containerView.frame.size.width, height: self.containerView.frame.size.height)
        
        // Add Child View Controller
        addChildViewController(viewController)
        viewController.view.translatesAutoresizingMaskIntoConstraints = true
        
        // Add Child View as Subview
        containerView.addSubview(viewController.view)
        
        // Notify Child View Controller
        viewController.didMove(toParentViewController: self)
    }

现在在 DidLoad 中只需调用

self.add1(asChildViewController: FirstObject)

输出:

还要检查您可以尝试的第二个选项

https://stackoverflow.com/a/48274222/6080920

不需要专门为此目的使用容器视图,只需一个普通的 UIView 也可以用于此检查链接

使用 UIView 的示例项目

https://drive.google.com/open?id=1M12Nv4PLNUePSJFHf7w8b08M2_mWcUEC

使用 ContainerView 的示例项目

https://github.com/iOS-Geek/ContainerViews.git

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多