Mam bardzo dziwne zachowanie podczas używania UIPageViewController w mojej aplikacji. Podczas pierwszego przesunięcia do następnego widoku lub w dowolnym momencie, gdy nastąpi zmiana kierunku przesuwania (tj. Na końcu listy i powrót), wynikowy widok jest pusty i muszę ponownie przesunąć ten sam kierunek, aby wyświetlić odpowiedni widok.UIPageViewController Second View Goes Blank
Przykład workflow z 3 widoki:
- Pierwszy widok prezentowane
- Przesuń w prawo
- drugi widok miga i obecnie
- przesunięcie w prawo
- Drugi pogląd przedstawiony
- Przesunięcie w prawo
- Trzeci widok przedstawiony
- przesunięcie w lewo
- drugi widok miga i poza
- przesunięcie w lewym
- Drugi pogląd przedstawiony
zauważyłem poprzez rejestrowanie gdy miga się dzieje (2 & 3 powyżej), sekwencja zdarzeń jest następująca:
- GetNextViewController nazywa
- GetPreviousViewController nazywa
- GetNextViewController nazywa
Wtedy kiedy przesuń ponownie GetNextViewController jest odpowiednio nazywane a widok jest pokazany.
Mój problem polega oczywiście na tym, że drugi widok powinien być wyświetlany bez mrugania. Próbowałem różnych rzeczy, ale nic nie było owocne.
UPDATE
Oto przykład aplikacja pojedynczy kontroler, który reprodukuje problem:
using System;
using System.Drawing;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
using System.Collections.Generic;
namespace TestPageView
{
public partial class TestPageViewViewController : UIViewController
{
public TestPageViewViewController() : base ("TestPageViewViewController", null)
{
}
public override void DidReceiveMemoryWarning()
{
// Releases the view if it doesn't have a superview.
base.DidReceiveMemoryWarning();
// Release any cached data, images, etc that aren't in use.
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
var controllers = new List<UIViewController>
{
new TestViewController(View, 1),
new TestViewController(View, 2),
new TestViewController(View, 3),
new TestViewController(View, 4)
};
var _pageViewController = new UIPageViewController(UIPageViewControllerTransitionStyle.Scroll, UIPageViewControllerNavigationOrientation.Horizontal);
var dataSource = new ViewDataSource(controllers);
_pageViewController.DataSource = dataSource;
//ViewDataSource has an indexer that returns it's controllers
_pageViewController.SetViewControllers(new[] { controllers[0] }, UIPageViewControllerNavigationDirection.Forward, false, null);
View.AddSubview(_pageViewController.View);
}
public override bool ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation)
{
// Return true for supported orientations
return (toInterfaceOrientation != UIInterfaceOrientation.PortraitUpsideDown);
}
}
public class TestViewController : UIViewController
{
private readonly UIView _parent;
private readonly int _number;
public TestViewController(UIView parent, int number)
{
_parent = parent;
_number = number;
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
var textView = new UITextView(_parent.Bounds);
textView.TextAlignment = UITextAlignment.Center;
textView.AttributedText = new NSAttributedString(_number.ToString(), UIFont.BoldSystemFontOfSize(18));
View.Add(textView);
}
}
public class ViewDataSource : UIPageViewControllerDataSource
{
private LinkedListNode<UIViewController> current;
public ViewDataSource(IEnumerable<UIViewController> controllers)
{
var controllerLiist = new LinkedList<UIViewController>(controllers);
current = controllerLiist.First;
}
public override UIViewController GetPreviousViewController(UIPageViewController pageViewController, UIViewController referenceViewController)
{
if(current.Previous == null){
Console.WriteLine("returning previous nothing");
return null;
}
Console.WriteLine("returning previous something");
current = current.Previous;
return current.Value;
}
public override UIViewController GetNextViewController(UIPageViewController pageViewController, UIViewController referenceViewController)
{
if(current.Next == null){
Console.WriteLine("returning next nothing");
return null;
}
Console.WriteLine("returning next something");
current = current.Next;
return current.Value;
}
}
}