【问题标题】:Move two ScrollView in different ViewControllers在不同的 ViewController 中移动两个 ScrollView
【发布时间】:2017-06-17 19:50:49
【问题描述】:

我有以下问题,我正在制定一个学校时间表,我有 2 个 viewController,每个都有 scrollView。在viewController“Bloques”中,我在列表的一侧有一个containerView(列表在scrollView内),它将包含“Dias”viewController,这个想法是当我使用分页从一天切换到另一天时“迪亚斯”,不要移动集团名单。问题是列表太长了,所以我在两个viewController中都使用了scrollView,它们具有相同的帧数,然后当我在Y轴上滚动时,例如“Bloques”,我希望它也可以在“直径”滚动视图。在另一个项目中,我做了类似的事情,但是在同一个 viewController 中,这并没有给我带来很大的复杂性,但是在不同的 viewControllers 中会产生以下错误:

致命错误:在展开可选值时意外发现 nil:

错误:

viewControllers的结构:

大块

@IBOutlet weak var bloquesScrollView: UIScrollView!

override public func viewDidLoad() {
    super.viewDidLoad()
    bloquesScrollView.delegate = self
}

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView.restorationIdentifier == "bloques" {
        let ejey = bloquesScrollView.contentOffset.y
        let pruebaController: prueba = prueba()
        pruebaController.mover(y: Int(ejey))
    }
}

DIAS

@IBOutlet weak var diasScrollView: UIScrollView!

func mover(y: Int?) {
    print("casi \(y)")
    diasScrollView.setContentOffset(CGPoint(x: 0, y: y!), animated: false)
}
override func viewDidLoad() {
    super.viewDidLoad()
    diasScrollView.delegate = self
}

更正问题,我寻找一种方法,其中包含与 UIViewController“Bloques”中的块对应的 ScrollView 的不同 UIViewController(星期一、星期二等),如果它们也向“Blocks”的 ScrollView 发出移动信号移动或反之。 需要说明的是,周一、周二等都包含在“Bloques”中的一个Container View中。 我知道 Container View 控制器就像任何其他 UIViewController 子类一样管理视图,在这种情况下,中间的图像是 Container View 的 UIViewController,它将在星期一、星期二等运行。之前我意识到的是一个列表“Bloques”在每个 UIViewController 内(周一、周二等),所以更容易做到,但视图很奇怪,因为列表应该是静态的,不能移动并再次出现在下一页(从周一开始)以周二为例)。我不知道是否有比我建议的更简单的方法。

New Situation

【问题讨论】:

    标签: ios swift uiviewcontroller uiscrollview


    【解决方案1】:

    编辑

    问题在于,在您的第一个代码中 let pruebaController: prueba = prueba() 创建了一个全新的 prueba 实例。这与具有 scrollView 的 prueba 不同,因此它的 scrollView 为 nil,当您尝试使用它时会崩溃。

    请试试这个代码..

    块状

    @IBOutlet weak var bloquesScrollView: UIScrollView!
    
    override public func viewDidLoad() {
        super.viewDidLoad()
        bloquesScrollView.delegate = self
    }
    
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        if scrollView.restorationIdentifier == "bloques" {
            let ejey = bloquesScrollView.contentOffset.y
    
            // try this code....
            let vc = UIStoryboard(name: '<Here Your storyboard name (default : "main">', bundle: nil)
                     .instantiateViewController(withIdentifier: '<Here Your DIAS Identifier>') as! prueba
            vc.mover(y: Int(ejey))
        }
    }
    

    【讨论】:

    • 我添加了一个更好的解释,UIViewControllers 在不同的视图中工作,“Dias”包含在“Bloques”中,而“Dias”又包含其他 UIViewControllers(图像中的星期一、星期二等) ),但在模拟器上同时工作,所以我不能让它与同一个类一起工作
    • 嗯.. 我可以在描述中添加“调试器输出”吗?我想知道这是什么错误。
    • 只有这个:致命错误:在展开可选值 (lldb) 时意外发现 nil
    • No works :/, 相同的错误 -> 致命错误:在展开 Optional 值时意外发现 nil,我将尝试像以前的项目一样进行操作。无论如何感谢您的帮助:D!
    • 无法为您提供合适的解决方案,我深表歉意。
    猜你喜欢
    • 1970-01-01
    • 2018-12-10
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多