我想在单击navigationItem时滚动视图。但是,这里有一些错误。
-
我想让snapchatlike滚动视图。还行,但是……当我从viewdidload函数中调用scrollView时,scrollView是nil!
-
我已经让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