0

我有两个控制器 A 和 B 在 B 中有一个标签和一个字符串 在 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]; 

我只得到 B 中的 ObjB.MyString 值,没有得到标签文本。任何人都可以帮忙。在此先感谢。

4

3 回答 3

1

假设这MyLabel是一个UILabel(旁注:避免 ivars 的大写名称 - 在 Objc 中,大写名称 [按约定] 用于类),未设置该值的原因是因为B尚未加载控制器的视图层次结构(即你的标签nil在这一点上)。所以你有三个选择:

  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 回答
1

在两个视图控制器之间传递数据的最佳方式是在控制器 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 用于我的所有项目,所以我不使用 release 命令。

于 2012-08-01T10:49:33.410 回答
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 回答