我想在单击navigationItem时滚动视图。 但是......有一些错误。
我想制作像Snapchat一样的滚动视图。 它工作正常,但是...当我从viewdidload函数调用scrollView时,scrollView是零!
我已经像滑动视图一样制作了像。但我想点击导航项目(心形标记)时滑动视图。
我的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()
}
答案 0 :(得分:1)
在您的代码中,您可以在viewDidLoad
中设置视图框。在viewDidLoad
视图中,视图仅在内存中加载但尚未在屏幕中显示,因此如果您尝试在viewDidLoad
中询问视图中的帧,则无法获得合适的值。
而是使用viewWillAppear
,您可以在其中查看其框架,并获得正确的值,因为视图已准备好显示。
答案 1 :(得分:0)
类本身不包含其中的布局信息。因此,视图控制器对象无法知道哪个视图对象连接到哪个IBOutlet。视图控制器必须通过故事板本身进行实例化。您可以使用以下方法
storyboard?.instantiateInitialViewController()
storyboard?.instantiateViewControllerWithIdentifier("YOUR_VC_STORYBOARD_ID")
当您使用第二种方法时,不要忘记设置故事板标识符。 当您转到View Controller时,您可以找到输入标识符的位置 - >身份检查员 - > Storyboard_ID