2014-04-23 55 views
2

我有一個UIPageViewController 7頁。用戶在進入下一頁之前必須在每個頁面中輸入所有必填字段。如果用戶沒有輸入必填字段,我應該顯示一個警告彈出窗口,如果用戶嘗試進入下一頁,請將用戶保留在同一頁面中。有誰知道我如何取消頁面刷卡並保持用戶在同一頁面,如果用戶不輸入必填字段?UIPageViewController取消頁面刷卡

謝謝, Anand。

回答

2

如果您對pageviewcontroller一個數據源,可以爲方法返回nil:

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController 

你可能設置從開始所有viewcontrollers,但要做到這一點,你需要設置初始視圖 - 控制,並從數據源方法提供下一個和前一個視圖控制器。

它不會禁用滾動視圖中的滾動,這意味着用戶可以滾動並對最後一頁進行「反彈」。

編輯: 請注意,UIPageViewController緩存來自它的數據源的答案;當您爲給定索引返回一個答案時,它將不會再次詢問它,直到滾動距離足夠遠或您手動設置viewControllers。

爲了您的刷新工作,作爲一種解決方法,你可以撥打: pageViewcontroller setViewControllers:[pageViewcontroller viewControllers]方向:UIPageViewControllerNavigationDirectionForward 動畫:NO 完成:零]

使其放棄緩存並再次從您的數據源請求控制器。 (感謝道格拉斯山)

+1

如果您將返回值更改爲UIPageViewControllerDataSource方法,則UIPageViewController不會自動再次調用這些方法。沒有標準的方式來通知你的改變 - 類似於UITableView的'reloadData'。強制重新加載的解決方法是將UIPageViewController的視圖控制器設置爲其當前值:'[pageViewController setViewControllers:[pageViewController viewControllers] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil''。不管你指定的方向如何。 –

+0

@DouglasHill你是正確的,當你想刷新頁面控制器編程,這是你需要做的。我從問題中瞭解到用戶手動更改頁面。因此,在數據完成之前不要返回控制器是完全可行的,不需要刷新。當數據完成後用戶將滑動下一個控制器將被返回。 – DarthMike

+1

你試過了嗎?我做了,頁面視圖控制器跟蹤數據源提供的最後一個值。假設你在一個頁面上,並且一開始沒有下一頁,那麼就會發生一些事情(表單被填充)並且成爲下一頁;滾動仍然會反彈,因爲頁面視圖控制器不知道您剛剛添加的頁面。必須告訴它從其數據源重新加載。 –