ios - UIPageViewController Implementation - Black Screen After Changing View Controllers -
trying implement app allows users scroll between uiviewcontrollers
using uipageviewcontroller.
currently, after swiping second uiviewcontroller
, screen goes black , cannot scroll anymore. ideas?
here subclassed uipageviewcontroller code:
class applicationviewcontroller: uipageviewcontroller, uipageviewcontrollerdatasource, uipageviewcontrollerdelegate { var registrationcontroller : uiviewcontroller! var logincontroller : uiviewcontroller! var capturecontroller : uiviewcontroller! var visiblevcs = [uiviewcontroller]() var index = 0 override func viewdidload() { super.viewdidload() initcontrollers() reset() } override func didreceivememorywarning() { super.didreceivememorywarning() // dispose of resources can recreated. } func initcontrollers() { registrationcontroller = self.storyboard?.instantiateviewcontrollerwithidentifier("registrationviewcontroller") uiviewcontroller logincontroller = self.storyboard?.instantiateviewcontrollerwithidentifier("loginviewcontroller") uiviewcontroller capturecontroller = self.storyboard?.instantiateviewcontrollerwithidentifier("captureviewcontroller") uiviewcontroller visiblevcs = [registrationcontroller, logincontroller, capturecontroller] } func reset() { var currentcontroller = viewcontrolleratindex(index) pageviewcontroller.datasource = self self.setviewcontrollers([currentcontroller!], direction: uipageviewcontrollernavigationdirection.forward, animated: true, completion: nil) } func pageviewcontroller(pageviewcontroller: uipageviewcontroller, viewcontrollerafterviewcontroller viewcontroller: uiviewcontroller) -> uiviewcontroller? { if(index >= visiblevcs.count - 1){ return nil } return self.viewcontrolleratindex(++index) } func pageviewcontroller(pageviewcontroller: uipageviewcontroller, viewcontrollerbeforeviewcontroller viewcontroller: uiviewcontroller) -> uiviewcontroller? { if(index <= 0){ return nil } return self.viewcontrolleratindex(--index) } func viewcontrolleratindex(index : int) -> uiviewcontroller? { return visiblevcs[index]; } }
saving index property in uipageviewcontroller din't work me well. solve had create base uiviewcontroller index property follow:
class pageitemcontroller: uiviewcontroller { var index = -1 override func viewdidload() { super.viewdidload() } override func didreceivememorywarning() { super.didreceivememorywarning() } }
then make pages subclasses of pageitemcontroller , set indexes corresponding position in array
func initcontrollers(){ registrationcontroller = self.storyboard?.instantiateviewcontrollerwithidentifier("registrationviewcontroller") pageitemcontroller registrationcontroller.index = 0 logincontroller = self.storyboard?.instantiateviewcontrollerwithidentifier("loginviewcontroller") pageitemcontroller logincontroller.index = 1 capturecontroller = self.storyboard?.instantiateviewcontrollerwithidentifier("captureviewcontroller") pageitemcontroller capturecontroller.index = 2 // visiblevcs type must [pageitemcotroller] visiblevcs = [registrationcontroller, logincontroller, capturecontroller] }
and implement before , after methods based on currentcontroller index
func pageviewcontroller(pageviewcontroller: uipageviewcontroller, viewcontrollerbeforeviewcontroller viewcontroller: uiviewcontroller) -> uiviewcontroller? { let itemcontroller = viewcontroller as! pageitemcontroller if itemcontroller.index > 0 { return visiblevcs[itemcontroller.index - 1] } return nil } func pageviewcontroller(pageviewcontroller: uipageviewcontroller, viewcontrollerafterviewcontroller viewcontroller: uiviewcontroller) -> uiviewcontroller? { let itemcontroller = viewcontroller as! pageitemcontroller if itemcontroller.index < visiblevcs.count - 1 { return visiblevcs[itemcontroller.index + 1] } return nil }
Comments
Post a Comment