从viewdidload调用scrollView时为nil



我想在单击navigationItem时滚动视图。但是,这里有一些错误。

  1. 我想让snapchatlike滚动视图。还行,但是……当我从viewdidload函数中调用scrollView时,scrollView是nil!

  2. 我已经让snapchat像滑动视图。但我想使滑动视图时,导航项目(心标记)点击。

我的ViewController viewdidload函数-它工作正常

@IBOutlet weak var scrollView: UIScrollView!

var V1 : LeftViewController = LeftViewController(nibName: "LeftViewController", bundle: nil)
var V2 : CenterViewController = CenterViewController(nibName: "CenterViewController", bundle: nil)
var V3 : RightViewController = RightViewController(nibName: "RightViewController", bundle: nil)

override func viewDidLoad() {
    super.viewDidLoad()

    self.addChildViewController(V1)
    self.scrollView.addSubview(V1.view)
    V1.didMoveToParentViewController(self)
    self.addChildViewController(V2)
    self.scrollView.addSubview(V2.view)
    V2.didMoveToParentViewController(self)
    self.addChildViewController(V3)
    self.scrollView.addSubview(V3.view)
    V3.didMoveToParentViewController(self)
    var V2Frame : CGRect = V2.view.frame
    V2Frame.origin.x = self.view.frame.width
    V2.view.frame = V2Frame

    var V3Frame : CGRect = V3.view.frame
    V3Frame.origin.x = 2 * self.view.frame.width
    V3.view.frame = V3Frame
    println(self)
    println(scrollView)
    println(V2.view.frame)
    self.scrollView.setContentOffset(CGPointMake(V2Frame.origin.x, self.view.frame.size.height), animated: false)

    self.scrollView.contentSize = CGSizeMake(self.view.frame.width * 3, self.view.frame.size.height)        }

我的ViewController clickEvent函数-为什么scrollView是nil?

    func clickEvent() {
    self.scrollView?.scrollRectToVisible(V2.view.frame, animated: true)
    println(self)
    println(scrollView)
    println(V2.view.frame)
    //self.scrollView.setContentOffset(CGPointMake(V2.view.frame.origin.x, self.view.frame.size.height), animated: true)
}

我从其他CenterViewController调用Viewcontroller中的clickEvent-它可以叫得很好,但是…在ViewController clickEvent函数的scrollView是nil..我该怎么修理它?

func clickEvent(sender: AnyObject) {
   ViewController().clickEvent()
}

在你的代码中,你得到并设置了一个视图框架在viewDidLoad。在viewDidLoad视图只加载在内存中,但还没有在屏幕上,所以如果你试图在viewDidLoad中请求一个视图的帧,你将得不到一个一致的值。相反,使用viewWillAppear,你可以要求视图的框架,你得到一个正确的值,因为视图已经准备好被显示。

类本身不包含布局信息。视图控制器对象没有办法知道哪个视图对象连接到哪个IBOutlet。视图控制器必须通过storyboard本身实例化。您可以使用以下方法

storyboard?.instantiateInitialViewController()
storyboard?.instantiateViewControllerWithIdentifier("YOUR_VC_STORYBOARD_ID")

当你使用第二个方法时,不要忘记设置Storyboard Identifier。你可以在视图控制器->标识检查器-> Storyboard_ID

中找到输入标识符的地方

最新更新