2017-03-16 6 views
1

私は、interactivePopGestureRecognizerを使用してアプリケーションに戻ったときに奇妙な動作に気づいただけです。Monotouch interactivePopGestureRecognizerとNavigation.popasync()ブランクビュー

ケースのシナリオ:

1)ユーザーは、彼が戻って1つのビュー「interactivePopGestureRecognizer」になり、左から右へのビューをドラッグ。 2)ユーザーが「await Navigation.PopAsync(false);」を上下にスワイプします。ユーザーは1つのビューに戻ります。 3)ユーザがアクション「1」を実行してから新しいビューを呼び出し、アクション2を使用してゴールバックしようとすると、空白のビューが表示されます。

このエラーは、ユーザーが操作1を使用してから操作2を使用しようとした場合にのみ表示されます。アクション1が使用されない場合、またはアクション1のみが使用されている場合はアプリが正常に動作し、両方は使用できません。

私はXamarin.Formsを使用していますが、 "interactivePopGestureRecognizer.enabled = false"を使用しようとしましたが、試行するたびにエラーが発生します。 2つの逆方向ナビゲートに違いはありますか?

------------- UPDATE ----------

多くを読み、インターネットで見た後、私はその〜interactivePopGestureRecognizer.enabled =判明falseは〜の内部で使用する場合にのみ機能しますViewWillAppear私はこれをアプリケーションのすべてのtableViewに適用するカスタムレンダラーを作成しました。私はまだこの方法で背中がスワイプしているのか理解したいと思うでしょう。

----更新2 --- 戻るボタンを押して、navigation.popasyncを呼び出すと空白のページも表示されます。これはXamarin.NavigationとiOSのバック関数の間にエラーがあるようです。

ページ:

MessagingCenter.Subscribe<string>(this, "UpSwipe", async (sender) => 
     { 
      try 
      { 

       //await Navigation.PopAsync(false); 
       Navigation.RemovePage(this); 
      } 
      catch (Exception e) 
      { 
       await DisplayAlert("IsLoading", e.ToString(), "OK"); 
      } 


     }); 

     MessagingCenter.Subscribe<string>(this, "DownSwipe", async (sender) => 
     { 
      try 
      { 
       //await Navigation.PopAsync(false); 
       Navigation.RemovePage(this); 
      } 
      catch (Exception e) 
      { 
       await DisplayAlert("IsLoading", e.ToString(), "OK"); 
      } 
     }); 

レンダラ:私は私のレンダラ内でreturnステートメントを追加することで、私の問題を修正し

private void UpdateUp() 
    { 
     // Insert view of DetailLeft element into subview 
     // Add button to open Detail to parent navbar, if not yet there 
     // Add gesture recognizer for left swipe 
     //Console.WriteLine ("Left swipe"); 
     if (!buttons[2].Selected && !buttons[1].Selected) 
     { 

      MessagingCenter.Send("Swiped Up", "UpSwipe"); 

     } 

    } 

    private void UpdateDown() 
    { 
     // Insert view of DetailLeft element into subview 
     // Add button to open Detail to parent navbar, if not yet there 
     // Add gesture recognizer for left swipe 
     //Console.WriteLine ("Left swipe"); 
     if (!buttons[2].Selected && !buttons[1].Selected) 
     { 
      MessagingCenter.Send("Swiped Down", "DownSwipe"); 
     } 

    } 

答えて

0

デバッグの時間後。レンダラーにいくつかのジェスチャーレッカーナーをチェックして追加していたので、このバグが出てくるまで戻りは必要ありませんでした。

protected override void OnElementChanged (ElementChangedEventArgs<LRMasterDetailPage> e) 
    { 
     base.OnElementChanged (e); 

     if (e.OldElement != null) 
     { 
      return; 
     } 
}