繁体   English   中英

如何从另一个类访问变量?

[英]How to access a variable from another class?

如何从另一个类(ViewController)访问变量“ pew”?

// ImageTouched.h

#import <UIKit/UIKit.h>

@interface ImageTouched : UIImageView    
@property (nonatomic, strong) NSString *pew;    
@end

// ImageTouched.m

#import "ImageTouched.h"

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    NSLog(@"Image Touched");
    self.pew = @"pewpewpewew";  
}

// myViewController.m

#import "ImageTouched.h"

- (void)viewDidLoad
{
    [super viewDidLoad];    
    ImageTouched *instance = [[ImageTouched alloc] init];        
    NSLog(@"Pew value is %@", instance.pew);

}

您可以在ImageTouched.h头文件中声明一个属性。 您还可以在头文件中定义一个吸气剂,本质上它的工作原理相同。 当您在头文件中定义属性或方法时,该属性或方法将被设置为“公共”,并可被其他类访问。

在您的头文件中使用类似以下的内容:

@property (nonatomic, strong) NSString *pew;

您必须在ImageTouched.m中的某个位置为pew分配一个值,例如:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{    
    NSLog(@"Image Touched");
    self.pew = @"pewpewpewew";
}

然后在视图控制器中创建一个实例:

ImageTouched *instance = [ImageTouched init] alloc];

那么您可以访问如下属性: instance.pew

例:

NSLog(@"Pew value is %@", instance.pew);

另一种选择是在头文件中使用getter方法。 在标题中声明:

- (NSString *)pew;

在实现(.m)文件中:

- (NSString *)pew
{
   return self.pew;
}

初始化之前,您正在访问变量pew viewDidLoad方法是视图控制器获得焦点时首先调用的方法之一。 这是调用方法的顺序:

-(void)initWithCoder
-(void)awakefromNib    //(if story board is used)
    or
-(void)loadView----() //if manually generating the view contoller

-(void)viewDidLoad-----(called only once in the life cycle of viewController)
-(void)viewWillAppear
-(void)viewDidAppear

视图加载完成后,将调用touchesBegan方法。 正如我在edwardmp的评论中所说。 您需要先初始化变量。 您可以在ImageTouched类的构造函数中对其进行初始化,也可以通过实现viewDidLoad调用之前的方法之一来对其进行初始化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM