0

「詳細」ViewControllerをセットアップする最良の方法は何ですか? UILabel を持つ非常に単純な DetailViewController があるとします。APIがあります(これは概念を説明するための疑似コードです):

UpdateLabel(string text)
{
  this.label.text=text;
}

したがって、親 ViewController には次のものがあります。

PrepareForSegue(UIStoryboardSegue segue, NSObject sender)
{
  base.PrepareForSegue(segue, sender);
  DetaiViewController.UpdateLabel("Hello");
}

ただし、ViewDidLoad がまだ呼び出されていないため、詳細ビュー コントローラーで "label" が null であるため、これはクラッシュします。これは、UpdateLabel にこのようなものを追加することで修正できることを知っています

UpdateLabel(string text)
{
  this.View.Hidden=this.View.Hidden; // To force view to load
  this.label.text=text;
}

しかし、それは非常にハッキーに思えます。

または、UpdateLabel を変更して、文字列のみを保存することもできます。

UpdateLabel(string text)
{
   this.textString.text=text;
}

次に、ViewDidLoad でラベルを初期化します。

public override void ViewDidLoad() 
{
   base.ViewDidLoad();
   this.label.text=this.textString;
}

しかし、後で親コントローラーにラベルを変更させたい場合はどうすればよいですか? UpdateLabel を呼び出すと、textString 変数のみが更新され、ラベルは変更されません。

これに対する正しいアプローチは何ですか?

4

2 に答える 2

0
  1. テキストを渡して保存し、init更新します。UIViewControllerviewDidLoadUILabel
  2. UILabel次に、それを他のクラスに公開することで (たとえば、プロパティとして) を更新できます。
于 2013-03-07T13:03:19.200 に答える
0

ビューが表示されるたびに、詳細ビュー コントローラーにそのビューを更新させることができます。

たとえばタブバーを使用する場合のように、詳細ビューがセグエの結果ではなく表示され、viewDidLoad が呼び出されない場合、親コントローラーを詳細ビューコントローラーのデリゲートにして、viewWillAppear で呼び出すことができます。詳細ビュー コントローラーを更新するデリゲート メソッド。その後、詳細ビュー コントローラーはそのビュー/サブビューを更新します。

このようにして、親コントローラーに変更を加える機会を与えます。

それがあなたにとって最良の選択肢であるかどうかはわかりません...

于 2014-01-05T18:30:53.660 に答える