状況:データエントリのリストからPageViewControllerに戻る必要があります。私は私が私のUITableView
と私にUIPageViewController
からボタンを経由して行くことができる)のviewDidLoadでUIPageViewController
(からUIViewController
(場所)を設定した場合:削除されたPageViewControllerエントリへのナビゲート方法/ PageViewControllerエントリの変更
前に、前の機能が
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
}
問題を働きます戻ってナビゲートすることができ、すべて正常に動作します。しかし、私はUITableView
の場所を削除したいと私はCoreData
のデータがなくなったので、私は戻って(すべての場所の背後には、CoreData
のダダです)、それがクラッシュするために移動したいものを削除します。
私はで、UIViewController
(場所)をviewWillAppear(アニメーション:ブール)に設定しようとしました。今、私はエントリを削除して戻って自分のセットを持っているUIViewController
(場所)BUT私が持っている - 私は前のビューにスクロールするとちょうど表示されたの "コピー" viewControllerBeforeViewController
リターンnil ...これは可能ですか?
最初のviewDidLoad()バージョンのコードスニペット:私は「明らかにできていますUIPageViewController
さんviewWillAppear()
に呼び出すsetViewControllerAndClearCache(vc: UIViewController)
で
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)
})
})
}
}
:私は解決策を見つけた
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) {
}