可能重复:
Interact with a view controller from another view controller
viewcontrollerOne.h
UILabel *label;
viewcontrollerTwo.m
-(void)myMethod
{
viewControllerOne *obj = [[viewControllerOne alloc]init];
obj.label.text = @"abcd";
}
我想在其他视图控制器中访问一个viewcontroller的变量。我尝试了上面的方法,但它不适合我。我搜索了其他线程,但大多数答案告诉我在appdelegate中声明它们。那么还有其他方法而不是在appdelegate中声明它吗?
答案 0 :(得分:0)
你的代码错了,你应该有labelOne,而不是label:
obj.labelOne.text = @"abcd";
此外,您的标签可能尚不存在 - 您是否在init函数中创建它?如果你有一个该控制器的xib文件,那么你需要加载它,以便创建和链接所有控件:
viewcontrollerOne *controllerNew = [[viewcontrollerOne alloc] initWithNibName:@"viewcontrollerOne" bundle:nil];
此外,将标签声明为属性而不是成员变量会更好:
@property (strong, nonatomic) UILabel *labelOne
然后在实现文件中合成setter / getter方法:
@synthesize labelOne;
最后,Cocoa命名标准是类名应以大写字母开头。
答案 1 :(得分:0)
在viewcontrollerTwo中创建一个新方法(不要忘记在* .h文件中声明它):
-(id) setParams:(UILabel *)lb{
labelOne = [[UILabel alloc] init];
labelOne = lb
return self;
}
然后,当你需要从第一个看到这个视图控制器时:
viewcontrollerTwo *controllerNew = [[viewcontrollerTwo alloc] initWithNibName:@"viewcontrollerTwo" bundle:nil];
[self.navigationController pushViewController:controllerNew animated:YES];
controllerNew = [controllerNew setParams:labelOne];
[controllerNew release];
答案 2 :(得分:0)
很容易看到......你可以通过App Delegate类来实现。
在appDelegate类中编写所需的变量,如.h
UILabel *myLabel;
@property (nonatomic) UILabel *myLabel;
IN .m文件: -
synthsize myLabel;
myLabel = [[UILabel alloc]init];
现在在任何一个viewController中你需要这样做这个标签: -
在.h文件中: -
@class AppDelegateClass; //forward decleration
AppDelegateClass *appDelegate;
UILabel *localLabel; //CurrentViewController Label
//Make Property
.m文件中的: -
//synthesize the Label
appDelegate = (AppDelegateClass *)[[UIApplication SharedApplication]delegate];
//now to acccess it
localLabel = appDelegate.myLabel;
并完成......
希望它有所帮助,如果那么请勾选为正确答案并提出答案 .... :)
答案 3 :(得分:-2)
请尝试以下代码而不是代码。它会正常工作......
viewControllerOne *obj = [viewControllerOne alloc];
obj.variableName = @"abcd";
[obj initWithNibName:@"nibName"];
由于