2012-02-05 100 views
1

我發現了一些代碼,可以幫助我在用戶從UITextView元素觸摸屏幕時退出鍵盤。退出觸摸鍵盤

下面是它的外觀:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
UITouch *touch = [[event allTouches] anyObject]; 
if([self.speechBubble.speechText isFirstResponder] && [touch view] != self.speechBubble.speechText){ 
    [self.speechBubble.speechText resignFirstResponder]; 
} 
[super touchesBegan:touches withEvent:event]; 
} 

這工作完全,到目前爲止,如果用戶在文本視圖之外的任何地方倒是會卸下鍵盤。但是,它只適用於我正在運行它的特定對象,所以如果我有兩個speechBubbles,它將不起作用。

如何更改此設置以使任何speechBubble具有相同的效果? (我可以將這段代碼從我的ViewController移動到我的SpeechBubble類,但是如何使用[touch view]觸及speechBubble的視圖之外的某個小問題。)謝謝

回答

3

我剛剛發現的東西可能使用你的是:

[self.view endEditing:YES]; 

將辭職第一響應從您無需手動跟蹤它自己當前擁有的任何元素。

關於你的示例代碼,這樣的事情可能會奏效,取決於你的speechBubbles是如何工作的:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    // Note the '!': 
    if(![[touch view] class] isKindOfClass [speechBubble class]]){ 
    // It's not a bubble they touched, dismiss the keyboard: 
    [self.view endEditing:YES]; 
    } 
    [super touchesBegan:touches withEvent:event]; 
} 
+0

好極了,endEditing是偉大的。我正在考慮嘗試使用isKindOfClass,但不知道你可以像這樣訪問[touch view]類。謝謝 – user339946 2012-02-05 20:40:03