2013-11-21 36 views
0

這是我的自定義UITextField類:爲什麼resignFirst Responder不隱藏鍵盤?

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     self.delegate = self; 

     [self addTarget:self action:@selector(hideKeyboard) forControlEvents:UIControlEventTouchUpOutside]; 

    } 
    return self; 
} 

- (void) hideKeyboard 
{ 
    NSLog(@"Clicked outside"); 
    [self resignFirstResponder]; 
} 

然而,當我點擊文本框外,hideKeyboard不會被調用。任何人都可以解釋爲什麼以及如何解決這個問題?

回答

2

您註冊的事件只有在您開始在文本字段內觸摸並完成文本字段以外的觸摸時纔會發生。

如果您在文本字段之外開始觸摸,則文本字段不會獲得任何事件。

將觸摸手勢識別器添加到包含文本字段的視圖。當該事件被觸發時,請辭去當前的第一響應者。

0

您的觸摸可能會被吞噬它們的其他UIControl吞噬。沒有看到你的層次結構是不可能的。

但是,即使您在空白UIView上只有1個UITextField,我也不會建議這樣做;它不能很好地擴展,如果你在視圖中添加另一個UIControl,可能會導致一些奇怪的錯誤。如果你在同一個UIView中有這個TextField UIButton,會發生什麼?

相反,我會將超級視圖更改爲UIControl(UIView的子類),並只使用UIControlEventTouchUpInside觸發解除鍵盤的方法。