从另一个viewcontroller访问变量

时间:2011-12-01 09:32:12

标签: iphone ios

  

可能重复:
  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中声明它吗?

4 个答案:

答案 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"];

由于