当使用UIPageViewController 时,您不需要实现这些方法来在页面之间导航(ViewControllers)。
您应该直接在UIPageViewController 中实现IUIPageViewControllerDataSource 接口,并将您的数据源设置为this 或子类UIPageViewControllerDataSource,并将数据源设置为创建的对象。
在任何一种情况下,您都将实现/覆盖这两种方法
UIViewController IUIPageViewControllerDataSource.GetNextViewController(UIPageViewController pageViewController, UIViewController referenceViewController)
{
}
UIViewController IUIPageViewControllerDataSource.GetPreviousViewController(UIPageViewController pageViewController, UIViewController referenceViewController)
{
}
这些是返回将要显示的页面(UIViewController)的方法。
在这里,您只需找到当前屏幕上控件的索引,然后获取下一个或上一个,然后从集合中返回该项目。
获取下一个 ViewController:
UIViewController IUIPageViewControllerDataSource.GetNextViewController(UIPageViewController pageViewController, UIViewController referenceViewController)
{
var index = MyViewControllers.IndexOf(referenceViewController);
var nextIndex = index + 1;
return MyViewControllers.ElementAtOrDefault(nextIndex);
}
获取之前的 ViewController:
UIViewController IUIPageViewControllerDataSource.GetPreviousViewController(UIPageViewController pageViewController, UIViewController referenceViewController)
{
var index = MyViewControllers.IndexOf(referenceViewController);
var previousIndex = index - 1;
return MyViewControllers.ElementAtOrDefault(previousIndex);
}
不同之处在于这些方法仅在转换成功完成时才被调用。
这是完整的代码:
public partial class MyPageViewController : UIPageViewController, IUIPageViewControllerDataSource
{
List<UIViewController> MyViewControllers = new List<UIViewController>();
public MyPageViewController (IntPtr handle) : base (handle)
{
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
var redViewController = UIStoryboard.FromName("Main", null).InstantiateViewController("redViewController");
var greenViewController = UIStoryboard.FromName("Main", null).InstantiateViewController("greenViewController");
var blueViewController = UIStoryboard.FromName("Main", null).InstantiateViewController("blueViewController");
MyViewControllers.Add(redViewController);
MyViewControllers.Add(greenViewController);
MyViewControllers.Add(blueViewController);
DataSource = this;
SetViewControllers(new UIViewController[] { MyViewControllers.First() }, UIPageViewControllerNavigationDirection.Forward, true, null);
}
public override void ViewWillAppear(bool animated)
{
base.ViewWillAppear(animated);
}
UIViewController IUIPageViewControllerDataSource.GetNextViewController(UIPageViewController pageViewController, UIViewController referenceViewController)
{
var index = MyViewControllers.IndexOf(referenceViewController);
var nextIndex = index + 1;
return MyViewControllers.ElementAtOrDefault(nextIndex);
}
UIViewController IUIPageViewControllerDataSource.GetPreviousViewController(UIPageViewController pageViewController, UIViewController referenceViewController)
{
var index = MyViewControllers.IndexOf(referenceViewController);
var previousIndex = index - 1;
return MyViewControllers.ElementAtOrDefault(previousIndex);
}
}
希望这会有所帮助!