2

私は登録フォームにあるアプリケーションを持っています。ユーザーがサブミットをクリックすると、前のページに移動します。前のページにあるときに、ユーザーがクリックすると、必要のない登録ページに戻ります。スタックから登録ビューを削除するにはどうすればよいですか?スタックから現在のビューをポップして新しいものをプッシュXamarin

これは私の現在のアプローチです:

//inside MyRegistrationController button press 
MyPreviousController SVC = this.Storyboard.InstantiateViewController("MyPreviousController") as MyPreviousController; 
      if(SVC != null){ 
       SVC.offender = offender; 


       //var viewControllers = this.NavigationController.ViewControllers; 
       //viewControllers[viewControllers.Length - 1].View.RemoveFromSuperview(); 
       //this.NavigationController.ViewControllers = viewControllers; 

       this.NavigationController.PopViewController(true); 
       this.NavigationController.PushViewController(SVC, true); 
      } 

この現在のアプローチは、私は、私はその後すぐに更新されたバージョンに行くMyPreviousController(更新UN)に行くMyRegistrationController上のボタンをクリックし、スタック、との奇妙な何かをしますの更新版に戻って、戻るボタンをクリックすると、私はMyPreviousControllerに戻ります。

+0

を削除しました。あなたのコメントアウトされたコードの問題は、ViewControllerから単にViewを削除していることです。 ViewControllerを配列から削除し、ViewControllersプロパティを更新された配列に設定して、スタックにもう存在しないようにすることができます。 – dylansturg

+0

私の問題は、UIViewController [] 'remove関数がないので、その配列から要素を削除する方法がわからないことです。 –

+0

配列は要素の追加または削除を許可していません - 固定サイズのデータ​​構造です。 LINQを使うのはかなり簡単です - 一番上に 'using System.Linq;'を追加してから、 'viewControllers.Take(viewControllers.Length 1).ToArray();'を実行すると、最後の配列なしで新しい配列が作成されますViewControllerを元の配列から削除します。 – dylansturg

答えて

3

わかりました。私の問題は二重になりました。 1つはビューをポップアップする必要がありました.2つはリロードするテーブルのデータがMyPreviousControllerである必要がありました(私が立ち上げなかった問題)。だから私は、次の操作を行うために必要な:

は単に私がするのに必要な電流コントローラをオフにポップするには、単に言う:しかしやっ

//inside MyRegistrationController button press 
MyPreviousController SVC = this.Storyboard.InstantiateViewController("MyPreviousController") as MyPreviousController; 
     if(SVC != null){ 
      SVC.offender = offender; 

      this.NavigationController.PopViewController(true); 
} 

ただ、これは更新されませするMyPreviousで私のテーブルを引き起こしました。だから私はMyPreviousController.csでこれを置くために必要な:

public override void ViewWillAppear (bool animated) 
    { 
     base.ViewWillAppear (animated); 
     InvokeOnMainThread (delegate { 
      TableView.Source = source; 
      TableView.ReloadData(); 
     }); 
    } 

、それが成功し、テーブルを更新し、 `NavigationController.ViewControllers`が動作する使用登録ビュー

+0

'ViewenderAppear'のコードをプロパティの設定者に入れるだけで、'犯人はView Controllerのプロパティだと仮定しますか? ViewWillAppearはビューが表示されるたびに発生します。したがって、最初に開くとき、またはユーザーが元に戻ったとき。 'ViewDidLoad'のようなものでテーブルビューで' ReloadData'を呼び出さないようにしてください。さもなければテーブルビューを2回更新するでしょう。 –

関連する問題