如何从另一个类(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);
}
答案 0 :(得分:0)
您可以在ImageTouched.h头文件中声明属性。您还可以在头文件中定义一个getter,基本上它的工作方式相同。当您在头文件中定义属性或方法时,它会被生成&#34; public&#34;并且可以被其他类访问。
在头文件中使用以下内容:
@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;
}
答案 1 :(得分:0)
在初始化变量之前,您正在访问变量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
调用之前的方法之一。