2016-05-27 10 views
0
我創建一個類來處理解僱鍵盤

定製類:initWithTarget:自不會讓我的類來調用選擇

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]; 

但似乎singleTap:沒有被調用。 我可以在這個自定義課程中完成這一切嗎?

在此先感謝。當它超出範圍在任何塊它在。

你需要保持一個強引用它創造的最終

+1

只是使用這個庫來關閉鍵盤https://github.com/hackiftekhar/IQKeyboardManager 這是非常簡單的使用 – korgx9

+0

感謝這是一個很棒的東西! – EthanChou

回答

0

tapReconizer實例(reg)被釋放。最簡單的方法可能是將reg作爲實例變量。

僅供參考 - 您可能打算命名您的班級TapRecognizer。拼寫錯誤的識別器是一種標準的做法,將類命名爲以大寫字母開頭。方法和變量名稱以小寫字母開頭。

+0

我將'UIView * myView;'更改爲'@property(strong,nonatomic)UIView * myView;'您的建議,但它是一樣的。如何正確地使'reg'實例變量? – EthanChou

+1

在您的ViewController中,將您的變量** reg **聲明爲強變量 –

+0

@EthanChou您誤解了我在答案中所陳述的內容。添加一個@屬性(非原子,強大的)TapRecognizer * reg;'屬性到你的視圖控制器。您無需在TapRecognizer類中更改任何內容。 – rmaddy

0

在您的視圖控制器

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

這裏reg爲得到釋放,因此使得它是全球性強。

聲明它在你的viewcontroller.h

@property (strong, nonatomic) TapReconizer* reg; 

或在您的.h或視圖控制器 的.M後

@interface ViewController : UIViewController 
{ 
TapReconizer* reg; 
} 

希望它會幫助你。

相關問題