initWithTarget:self并没有让我的类调用选择器

时间:2016-05-27 04:26:03

标签: ios objective-c

我创建了一个处理解雇键盘的类

自定义类:

tapReconizer.h:

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface tapReconizer : NSObject {
    UIView* myView;
}

-(void) tapreg:(UIView*)view;

@end

tapReconizer.m:

#import "tapReconizer.h"

@implementation tapReconizer

-(void) tapreg:(UIView*)view {
    myView = view;
    UITapGestureRecognizer *tapGestureRecognizer;
    tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)];

    tapGestureRecognizer.numberOfTapsRequired = 1;
    [myView addGestureRecognizer:tapGestureRecognizer];
}

- (void)singleTap:(UIGestureRecognizer *)recognizer {    
    [myView endEditing:true];
}


@end

在我的viewcontorller中:

tapReconizer* reg = [[tapReconizer alloc]init];
    [reg tapreg:self.view];

但它似乎是单一的:没有被调用。 我可以在这个自定义类中完成所有这些吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

tapReconizer实例(reg)在创建它的任何块的末尾超出范围时,它会被释放。

你需要对它有强烈的引用。最简单的方法可能是使reg成为实例变量。

仅供参考 - 您可能想要为您的班级TapRecognizer命名。你拼错识别器,标准类以大写字母开头是标准做法。方法和变量名以小写开头。

答案 1 :(得分:0)

在View控制器中

tapReconizer* reg = [[tapReconizer alloc]init];
[reg tapreg:self.view];

这里reg正在被取消分配,所以让它变得强大全球化。

在viewcontroller.h中声明它

 @property (strong, nonatomic) TapReconizer* reg; 

或在你的.h或.m视图控制器中 之后

 @interface ViewController : UIViewController 
 {
 TapReconizer* reg;
 }

希望它会对你有所帮助。