【问题标题】:scrollView setContentOffset crashes when accessing method from another file从另一个文件访问方法时,scrollView setContentOffset 崩溃
【发布时间】:2018-01-01 05:32:14
【问题描述】:

我有一个带有 scrollView IBOutlet 的 HomeView 类和一个改变 scrollView 偏移量的函数:

scrollView.setContentOffset(CGPoint(x: self.view.frame.width * 2, y: 0), animated: true)

从我尝试的 FeedView 类:

let Home = HomeView()
Home.ScrollRight()

但我收到此错误:

fatal error: unexpectedly found nil while unwrapping an Optional value

【问题讨论】:

  • 这是错误的!你为什么要这样做? , 您正在创建 HomeView 的新实例
  • 我有多个视图控制器子查看页面样式导航,并希望有一个滚动按钮。如何在不创建 HomeView 的新实例的情况下访问该功能?
  • 能否再添加一些容易遇到的代码

标签: ios swift swift3 uiscrollview uikit


【解决方案1】:

因为您的 HomeView 是由 XIB 或故事板创建的。这就是为什么下面的行返回nil 对象。

let Home = HomeView()

如果你想从另一个类调用HomeViewScrollRight() 方法,那么声明HomeView 的全局变量就像

var homeVC = HomeView()

viewDidMethodHomeView

homeVC = self as HomeView

不是你可以从任何地方访问homeVC

只需调用方法

homeVC.ScrollRight() 

来自另一个视图控制器。

=========================================
EX

import UIKit
var homeVC = HomeVC()

class HomeVC: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        homeVC = self as HomeVC
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

现在您可以在任何地方使用homeVC 对象和访问HomeVC 的属性。

注意: 如果您从同一个 viewController (HomeView) 调用函数,那么您不需要创建该 viewController 的对象。您可以直接通过下面的方式简单地调用函数。

ScrollRight()self.ScrollRight()

【讨论】:

  • 在 HomeView 中你有“homeVC = self as HomeView”我得到一个未识别 homeVC 的错误
  • 您是否在“HomeView”的“import”语句下方声明了“var homeVC = HomeView()”?
  • @ChrisRichards - 检查我的更新答案,我为你做了一个演示,它对我有用。
【解决方案2】:

如果您的滚动视图设置为出口,则意味着当所述视图控制器从情节提要中实例化时,它是在视图控制器的主视图中创建的。

这段代码:

let Home = HomeView()

...最多实例化视图控制器本身,但它不加载它的视图(更不用说将插座连接到适当的子视图 - 在这种情况下,您的滚动视图)。

请阅读视图控制器视图生命周期。这一切都在 Apple 的编程指南和无数在线教程中。

【讨论】:

    猜你喜欢
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多