2016-08-06 5 views
2

Ich entwickle eine iOS-App mit Xamarin, nur Code, ohne StoryBoard oder Designer. Ich muss einen UiViewController implementieren, der viele Bilder enthält, und scrollt horizontal, genau wie this.xamarin.ios implementieren PageController mit nur Bilder Code

Ich habe nichts passendes für mich gefunden. also jemand einen Vorschlag oder ein Beispiel haben, um es mir zu zeigen?

+0

dieser Link ist für TVOS, nicht iOS – Jason

Antwort

5

Scheint, Sie brauchen eine UIPageViewController ohne Storyboard oder .xib.

Sie benötigen 3 benutzerdefinierte Klassen, um es zu implementieren.

  1. MyPageViewController - Eine benutzerdefinierte UIPageViewController

    public class MyPageViewController : UIPageViewController 
    { 
        private List<ContentViewController> pages = new List<ContentViewController>(); 
    
        public MyPageViewController() : base(UIPageViewControllerTransitionStyle.Scroll, UIPageViewControllerNavigationOrientation.Horizontal) 
        { 
         View.Frame = UIScreen.MainScreen.Bounds; 
    
         pages.Add(new ContentViewController(0,UIColor.Red)); 
         pages.Add(new ContentViewController(1,UIColor.Green)); 
         pages.Add(new ContentViewController(2,UIColor.Blue)); 
    
         DataSource = new PageDataSource(pages); 
    
         SetViewControllers(new UIViewController[] { pages [0] as UIViewController }, UIPageViewControllerNavigationDirection.Forward, false, null); 
        } 
    } 
    
  2. PageDataSource:

    public class PageDataSource : UIPageViewControllerDataSource 
    { 
        List<ContentViewController> pages; 
    
        public PageDataSource(List<ContentViewController> pages) 
        { 
         this.pages = pages; 
        } 
    
        override public UIViewController GetPreviousViewController(UIPageViewController pageViewController, UIViewController referenceViewController) 
        { 
         ContentViewController currentPage = referenceViewController as ContentViewController; 
         ContentViewController pageToReturn = null; 
    
         if (currentPage.Index == 0) 
         { 
          pageToReturn = pages[pages.Count - 1]; 
         } 
         else 
         { 
          pageToReturn = pages[currentPage.Index - 1]; 
         } 
    
         // NOTE: If the same view controller is returned, UIPageViewController will break and show black screen 
         return pageToReturn != currentPage ? pageToReturn : null; 
        } 
    
        override public UIViewController GetNextViewController(UIPageViewController pageViewController, UIViewController referenceViewController) 
        { 
         ContentViewController currentPage = referenceViewController as ContentViewController; 
         ContentViewController pageToReturn = pages[(currentPage.Index + 1) % pages.Count]; 
    
         return pageToReturn != currentPage ? pageToReturn : null; 
        } 
    } 
    
  3. ContentViewController - Eine benutzerdefinierte UIViewController, müssen nur die Eigenschaft hinzufügen Index

    public class ContentViewController : UIViewController 
    { 
        private int index = -1; 
        public int Index 
        { 
         get 
         { 
          return index; 
         } 
        } 
    
        public ContentViewController(int _index, UIColor backColor) 
        { 
         this.index = _index; 
         this.View.Frame = UIScreen.MainScreen.Bounds; 
         this.View.BackgroundColor = backColor; 
        } 
    } 
    

Und schließlich überschreiben die FinishedLaunching Methode in Ihrer AppDelegate.cs:

public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions) 
{ 
    this.Window = new UIWindow(UIScreen.MainScreen.Bounds); 
    this.Window.RootViewController = new MyPageViewController(); 
    this.Window.MakeKeyAndVisible(); 

    return true; 
} 

Hoffe, dass es Ihnen helfen kann.

Wenn Sie noch Fragen haben, lassen Sie es einfach hier.