从viewdidload调用时,scrollView为nil

时间:2015-09-11 15:09:26

标签: ios swift uiscrollview

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

  1. 我想制作像Snapchat一样的滚动视图。 它工作正常,但是...当我从viewdidload函数调用scrollView时,scrollView是零!

  2. 我已经像滑动视图一样制作了像。但我想点击导航项目(心形标记)时滑动视图。

  3. 我的ViewController viewdidload func - 它工作正常

    @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 func - 为什么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()
    }
    

2 个答案:

答案 0 :(得分:1)

在您的代码中,您可以在viewDidLoad中设置视图框。在viewDidLoad视图中,视图仅在内存中加载但尚未在屏幕中显示,因此如果您尝试在viewDidLoad中询问视图中的帧,则无法获得合适的值。 而是使用viewWillAppear,您可以在其中查看其框架,并获得正确的值,因为视图已准备好显示。

答案 1 :(得分:0)

类本身不包含其中的布局信息。因此,视图控制器对象无法知道哪个视图对象连接到哪个IBOutlet。视图控制器必须通过故事板本身进行实例化。您可以使用以下方法

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

当您使用第二种方法时,不要忘记设置故事板标识符。 当您转到View Controller时,您可以找到输入标识符的位置 - >身份检查员 - > Storyboard_ID