我有两个控制器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值,而不是获取标签文本。可以提供任何帮助。提前谢谢。
答案 0 :(得分:1)
假设MyLabel
是UILabel
(旁注:避免使用ivars的大写名称 - 在Objc中大写的名称按[惯例]用于类),未设置值的原因是因为尚未加载B
控制器的视图层次结构(此时您的标签为nil
)。所以你有三个选择:
强制视图层次结构加载&然后设置你的标签:
[ObjB loadView]; // Note: Apple says that you never should call this directly (just to illustrate my point)!!
让系统先通过请求视图为您加载层次结构:
id view = ObjB.view; // This is a bit of a 'hack' actually
只需在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];
感谢您的立即回复