如何在iphone中传递标签值

时间:2012-08-01 08:41:09

标签: iphone objective-c ios

我有两个控制器A&乙 在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值,而不是获取标签文本。可以提供任何帮助。提前谢谢。

3 个答案:

答案 0 :(得分:1)

假设MyLabelUILabel(旁注:避免使用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设置标签文字(我认为这是最佳选择)

答案 1 :(得分: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,所以我不使用发布命令。

答案 2 :(得分: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]; 

感谢您的立即回复