2016-02-10 1 views
0

У меня есть следующий код в моем приложении IOS:методов источника данных UIPageViewController не называется

class BannerTableViewCell: UITableViewCell, UIPageViewControllerDataSource { 
private var pageViewController: UIPageViewController! 
private var pages: [UIViewController] = [] 

override func awakeFromNib() { 
    super.awakeFromNib() 
    self.backgroundColor = UIColor.clearColor() 
    self.backgroundView?.backgroundColor = UIColor.clearColor() 
    self.contentView.backgroundColor = UIColor.clearColor() 
    self.selectionStyle = UITableViewCellSelectionStyle.None 

    pageViewController = UIPageViewController(); 

    self.pageViewController.dataSource = self 
    pageViewController.view.frame = CGRect(x: 0, y: 0, width: UIScreen.mainScreen().bounds.width, height: 130) 
    self.addSubview(pageViewController.view) 

    //Example data 
    let v1 = UIViewController() 
    v1.view.frame = CGRect(x: 0, y: 0, width: UIScreen.mainScreen().bounds.width, height: 130); 
    v1.view.backgroundColor = UIColor.blueColor() 

    let v2 = UIViewController() 
    v2.view.frame = CGRect(x: 0, y: 0, width: UIScreen.mainScreen().bounds.width, height: 130); 
    v2.view.backgroundColor = UIColor.greenColor() 

    pages.append(v1) 
    pages.append(v2) 
} 



func pageViewController(pageViewController: UIPageViewController, 
    viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { 
     guard let viewControllerIndex = pages.indexOf(viewController) else { 
      return nil 
     } 

     let previousIndex = viewControllerIndex - 1 

     guard previousIndex >= 0 else { 
      return nil 
     } 

     guard pages.count > previousIndex else { 
      return nil 
     } 

     return pages[previousIndex] 
} 

func pageViewController(pageViewController: UIPageViewController, 
    viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { 
     guard let viewControllerIndex = pages.indexOf(viewController) else { 
      return nil 
     } 

     let nextIndex = viewControllerIndex + 1 
     let orderedViewControllersCount = pages.count 

     guard orderedViewControllersCount != nextIndex else { 
      return nil 
     } 

     guard orderedViewControllersCount > nextIndex else { 
      return nil 
     } 

     return pages[nextIndex] 
} 

func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int { 
    return pages.count 
} 

func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int { 
    return 0 
} 
} 

Я инстанцирую эту ячейку в виде таблицы, однако страницы контроллера представления в этой ячейке всегда пусто, и методы источника данных pageViewController не вызываются. У вас есть идея, почему они не называются?

ответ

0

Вы должны использовать документированные инициализатор для конкретизации UIPageViewController:

public init(transitionStyle style: UIPageViewControllerTransitionStyle, navigationOrientation: UIPageViewControllerNavigationOrientation, options: [String : AnyObject]?) 

Также ViewControllers вы создаете в конце awakeFromNib может быть помещен в pageViewController сразу.

pageViewController.setViewControllers([v1, v2], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil) 
+0

С помощью использования конструктора вы упомянули presentationCountForPageViewController и методы presentationIndexForPageViewController вызывают, а 2 предыдущих - нет. Более того, когда я помещаюсь в экземплярную ячейку, приложение вылетает с ошибкой SIGABRT. –

+0

Каковы детали этого сбоя? – jervine10

+0

Отдельное примечание: у вас довольно сложная настройка. Вы устанавливаете UIPageViewController внутри UITableViewCell. По моему опыту, размещение UIViewController внутри TableViewCells обычно приводит к проблемам. – jervine10

Смежные вопросы