【问题标题】:How navigate back to a deleted PageViewController entry / change the PageViewController entry如何导航回已删除的 PageViewController 条目/更改 PageViewController 条目
【发布时间】:2016-05-21 01:25:09
【问题描述】:

情况:我想从数据条目列表导航回我的 PageViewController。

before 和 previous 函数起作用

func pageViewController(pageViewController: UIPageViewController,
                        viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {


    if ((viewController as! LocationViewController).mLocationIndex > 0){
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewControllerWithIdentifier("LocationViewController") as! LocationViewController
        vc.mLocationIndex = (viewController as! LocationViewController).mLocationIndex - 1
        return vc
    }
    return nil
}

func pageViewController(pageViewController: UIPageViewController,
                        viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {

    let locCount = DataManager.sharedInstance.getLocationCount()
    if ((viewController as! LocationViewController).mLocationIndex < locCount - 1){
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewControllerWithIdentifier("LocationViewController") as! LocationViewController
        vc.mLocationIndex = (viewController as! LocationViewController).mLocationIndex + 1
        return vc
    }

    return nil
}

问题:如果我在 viewDidLoad() 中从UIPageViewController 设置UIViewController(Location),我可以通过按钮从UIPageViewController 转到我的UITableView,我就是能够导航回来,一切正常。但是我想删除我的UITableView 中的位置,当我删除我想要返回的位置时(每个位置后面都是CoreData 中的数据),它会崩溃,因为CoreData 中的数据已经消失了。

我尝试在 viewWillAppear(animated: Bool) 中设置 UIViewController(Location)。现在我可以删除条目,向后导航并拥有自己的集合 UIViewController(Location) BUT 我有 - 如果我滚动到上一个视图,虽然@ 987654331@return nil...这怎么可能?

第一个viewDidLoad()版本的代码sn-p:

class MainPageViewController: UIPageViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    dataSource = self

    let dM = DataManager.sharedInstance
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewControllerWithIdentifier("LocationViewController") as! LocationViewController
    dM.mActualLocationIndex = 0

    // check if the index is too big (deleted data)
    if (dM.mActualLocationIndex < dM.getLocationCount()){
        vc.mLocationIndex = dM.mActualLocationIndex
    } else {
        vc.mLocationIndex = 0
        dM.mActualLocationIndex = 0
    }
    vc.mLocationIndex = 0
    setViewControllers([vc], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil)

}

override func viewWillAppear(animated: Bool) {

}

【问题讨论】:

    标签: ios swift uipageviewcontroller


    【解决方案1】:

    我找到了解决办法:

    extension UIPageViewController {
        func setViewControllerAndClearCache(vc: UIViewController){
            setViewControllers([vc], direction: .Forward, animated: true, completion: { _ in
                dispatch_async(dispatch_get_main_queue(), {
                    self.setViewControllers([vc], direction: .Forward, animated: false, completion: nil)                
                })
            })
        }
    }
    

    使用setViewControllerAndClearCache(vc: UIViewController)(我在UIPageViewControllerviewWillAppear() 中调用),我能够“清除已兑现的视图”,当我返回时,不再有前一个视图的“副本”!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-10
      • 2023-03-11
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多