我正在使用Monotouch(5.0.4)開發Ipad的應用程序。我有一個滑動手勢問題,我希望有人可以幫助我,滑動手勢可以兩次呼叫我的目標代表。滑動手勢觸發兩次
具體的情況是這樣的: 在我的UINavigationController中,我推入了第一個UIViewController(它是根),它被覆蓋的方法ViewDidLoad。在這個視圖控制器中,我註冊了一個滑動手勢(左),在其目標代表中,在導航控制器中推動一個新的視圖控制器。這也適用於多個不同的視圖控制器。但是,在第一個視圖控制器被按下之後,右側滑動手勢(彈出視圖控制器)會調用其委託兩次,並彈出兩個視圖控制器。這在根視圖控制器中不會發生。
我在這個簡單的課上對問題做了一個單獨的測試。它所做的是爲左右滑動註冊兩個滑動識別器。左滑動推動同一個視圖控制器的新實例,並且右滑動彈出它。我已經嘗試使用選擇器而不是NSAction委託,同樣的結果。
public class SwipeTest : UIViewController
{
public override void LoadView()
{
base.LoadView();
// Create left swipe recognizer
UISwipeGestureRecognizer leftRecognizer = new UISwipeGestureRecognizer();
leftRecognizer.Direction = UISwipeGestureRecognizerDirection.Left;
leftRecognizer.Delegate = new UIGestureRecognizerDelegate();
leftRecognizer.AddTarget (new NSAction (OnSwipeLeft));
View.AddGestureRecognizer (leftRecognizer);
// Create right swipe recognizer
UISwipeGestureRecognizer rightRecognizer = new UISwipeGestureRecognizer();
rightRecognizer.Direction = UISwipeGestureRecognizerDirection.Right;
rightRecognizer.Delegate = new UIGestureRecognizerDelegate();
rightRecognizer.AddTarget (new NSAction (OnSwipeRight));
View.AddGestureRecognizer (rightRecognizer);
}
public override void ViewWillDisappear (bool animated)
{
base.ViewWillDisappear (animated);
}
private void OnSwipeLeft()
{
Console.WriteLine ("swipe left");
NavigationManager.Instance.PushViewController (new SwipeTest(), true);
}
private void OnSwipeRight()
{
Console.WriteLine ("swipe right");
NavigationManager.Instance.PopViewControllerAnimated (true);
}
}
NavigationManager是我的UINavigationController,這是一個單身,但並沒有做很多事情。
public class NavigationManager : UINavigationController
{
#region Singleton
class Nested
{
static Nested() {}
internal static readonly NavigationManager instance = new NavigationManager();
}
public static NavigationManager Instance
{
get { return Nested.instance; }
}
#endregion
#region Private fields
private UIViewController firstController;
private UIViewController root;
#endregion
#region Constructor
private NavigationManager()
{
// Set first view
//firstController = new InitializationView();
firstController = new SwipeTest();
}
#endregion
#region Methods
public override void ViewDidLoad()
{
PushViewController (firstController, false);
base.ViewDidLoad();
}
#endregion
#region Properties
public UIViewController RootController
{
get {
return root;
}
set {
root = value;
ViewControllers = new UIViewController[1] {value};
}
}
#endregion
}
因此,要回顧:左刷卡(推視圖控制器)的作品,右刷卡(彈出一個視圖控制器)的作品第一次同時在根控制器(因此它實際上並沒有做任何事情),但在視圖控制器被推入後(在根控制器之後),右滑動會調用委託兩次。
我希望有人有一個想法,爲什麼會發生這種情況,我用我的Monotouch的知識用盡了嘗試。
可能的loadView被稱爲多次,創建多個手勢識別器? – 2012-01-03 14:30:45
我其實沒有測試過(或我忘了),但可悲的是,這不是問題。感謝您的建議,雖然:) – jub 2012-01-03 15:29:28
我認爲你可以刪除你在每個識別器上設置'Delegate',但我不認爲這會導致你的問題。你可以在GitHub上發佈一個快速項目來重現這一點嗎? – jonathanpeppers 2012-01-04 13:12:33