2012-03-05 13 views
3

どの入力が画面に表示されるかを動的に変更するアプリケーションでは、すべてElementsを作成し、現在のデータが必要なものを含むSectionを作成します。MonoTouch.Dialog要素の再利用

たとえば、ユーザーがとやりとりする場合は、フォームを更新し、それに応じてフィールドを表示する必要があります。

どうやらこのパターンは、このテストケースで示すように、動作しない:タイマーが起動したら

 var dateEntry = new DateTimeElement("Timestamp", DateTime.Now); 

     var section = new Section() { dateEntry }; 
     var root = new RootElement("Root") { section }; 
     var dvc = new DialogViewController(root); 

     window.RootViewController = dvc; 

     NSTimer.CreateScheduledTimer (TimeSpan.FromSeconds (2), delegate { 
      var newSection = new Section() { dateEntry }; 
      dvc.Root.Clear(); 
      dvc.Root.Add(newSection); 
     }); 

上記のコードは、DateTimeElement.FormatDateNullReferenceExceptionをスロー。

Sectionだけでなく、RootElementも再作成しましたが、役に立たなくなりました。

Elementsを再利用するための推奨パターンはありますか、またはデータが変更されるたびに新しい入力を作成するだけですか?

答えて

3

これはあなたのためのトリックを行う必要があり、そしてあなたがNStimerを削除することができます

 this.Root.Remove(section); 
     this.Root.Insert(0,UITableViewRowAnimation.Fade,newSection); 
+0

NSTimerは、この場合には、現実世界の使用状況をシミュレートするために、ただそこに画面が表示され、数秒後にボタンをクリックするユーザーです。私はあなたの解決策を試し、それが機能するかどうかを見てみましょう。 – Timm

+0

あなたのアプローチは私のために凍ったUIにつながります。私は新しい 'Section'を作り直してルートに追加すると思います。 – Timm

+0

いくつかのコードを表示できますか? – Janub