0

私は2つのコントローラーAとBを持っていますBには1つのラベルと1つの文字列がありますAには以下のコードを書きました

B *ObjB =[[B alloc]initWithNibName:@"B" bundle:nil];
ObjB.Mylabel.text=[NSString stringWithString:@"Add New name"];
ObjB.MyString=[NSString stringWithString:@"new string name"];
[self.navigationController pushViewController:ObjB animated:YES];
[ObjB release]; 

私は ObjB.MyString の値を B で取得しているだけで、ラベルのテキストを取得していません。

4

3 に答える 3

1

2 つのビュー コントローラー間でデータを渡す最良の方法は、コントローラー B で変数を宣言して、ラベルのテキストを保持することです。viewController B のヘッダー ファイル内

    NSString *labelText;

//Declare its property and synthesize in .m

コントローラー A では、コントローラー B に移動する前に、この変数を必要なテキスト (この場合は「新しい名前を追加」) に初期化します。

B *ObjB =[[B alloc]initWithNibName:@"B" bundle:nil];
ObjB.labelText = [NSString stringWithString:@"Add New name"];
ObjB.MyString = [NSString stringWithString:@"new string name"];
[self.navigationController pushViewController:ObjB animated:YES];

次にコントローラ B の viewDidLoad で、ラベルのテキストを文字列を含む変数に割り当てます。

ViewDidLoad of B
MyLabel.Text = labelText;
//Assuming you have mapped MyLabel to the IB. 

また、すべてのプロジェクトで ARC を使用しているため、リリース コマンドは使用しません。

于 2012-08-01T10:49:33.410 に答える
1

それMyLabelUILabel(補足: ivar の大文字の名前を避ける - Objc では、大文字の名前が [慣例により] クラスに使用される) と仮定すると、値が設定されていない理由は、Bコントローラーのビュー階層がまだ読み込まれていないためです (つまり、ラベルはnilこの時点にあります)。したがって、次の 3 つのオプションがあります。

  1. ビュー階層を強制的にロードしてから、ラベルを設定します。

    [ObjB loadView]; // Note: Apple says that you never should call this directly (just to illustrate my point)!!

  2. 最初にビューをリクエストして、システムに階層をロードさせます。

    id view = ObjB.view; // This is a bit of a 'hack' actually

  3. Bコントローラーに別のプロパティを追加し、それをviewDidLoad設定して、ラベルのテキストを設定するだけです(私の意見では、これが最良のオプションです)

于 2012-08-01T08:52:57.973 に答える
0

これは私の問題を解決しました

B *ObjB =[[B alloc]initWithNibName:@"B" bundle:nil];
[self.navigationController pushViewController:ObjB animated:YES];
ObjB.Mylabel.text=[NSString stringWithString:@"Add New name"];
ObjB.MyString=[NSString stringWithString:@"new string name"];
[ObjB release]; 

すぐに対応していただきありがとうございます

于 2012-08-01T09:13:46.087 に答える