我有一個包含多個文本框的UIView。現在我已經使用委託將響應者從文本字段更改爲另一個字段。在這種情況下,當用戶進入上一個文本字段時,我的鍵盤會消失。當用戶觸摸uiview時隱藏鍵盤
但現在我想隱藏我的鍵盤,當用戶觸摸UIView(觸摸屏幕上的任何地方除了文本框)。有人可以幫我弄這個嗎。
感謝
我有一個包含多個文本框的UIView。現在我已經使用委託將響應者從文本字段更改爲另一個字段。在這種情況下,當用戶進入上一個文本字段時,我的鍵盤會消失。當用戶觸摸uiview時隱藏鍵盤
但現在我想隱藏我的鍵盤,當用戶觸摸UIView(觸摸屏幕上的任何地方除了文本框)。有人可以幫我弄這個嗎。
感謝
使用resignFirstResponder中的touchesBegan,像這樣:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch * touch = [touches anyObject];
if(touch.phase == UITouchPhaseBegan) {
[self.myTextField resignFirstResponder];
}
}
您可能需要,如果你不知道在哪裏焦點當前位於調用此對多個文本字段;我沒有測試過這種情況。
此外,在界面生成器,你將需要啓用該視圖的「已啓用用戶交互」複選框,或編程使用:
myView.userInteractionEnabled = YES;
據Beginning iPhone Development,你畫一個圓矩形按鈕,這樣它涵蓋了你的整個UI;完整的屏幕。然後轉到佈局菜單並單擊發送到後面。然後在檢查員中,將按鈕的類型從round rect更改爲自定義。現在,向這個按鈕添加一個觸摸內部事件並將其附加到處理它的方法。在這個方法的身體,請確保您有語句:
[myTextFieldOne resignFirstResponder];
[myTextFieldTwo resignFirstResponder];
基本上發送resignFirstResponder
消息發送到每個文本字段,或能產生一個鍵盤的任何領域。
我其實是iPhone SDK的新手。我不知道這是否是最好的方法,但它是有效的,這是我從上述書中學到的。希望能幫助到你。
感謝Blaenk,我正在努力解決如何做到這一點,並沒有意識到我可以把一個按鈕放在後臺,很好的把戲!這裏是我的貢獻(新來這個網站,並可可觸及,因此它可能不是最強大的代碼以往,但它的工作迄今...):
我打電話從touchUpInside
事件這個方法對我的UIButton:
-(void)closeKeyboard:(id)sender {
UIView *theFirstResponder = [self findFirstResponder];
if (theFirstResponder) {
[theFirstResponder resignFirstResponder];
}
}
當該環路發現firstResponder:
- (UIView *)findFirstResponder {
UIView *firstResponderView = nil;
for (UIView *view in [self entryFields]) {
if ([view isFirstResponder]) {
firstResponderView = view;
break;
}
}
return firstResponderView;
}
它是取決於每個在具有分配給他們的(再次標籤視圖的UITextField
控件,可以做THA在Interface Builder中)。
無論如何,我的兩分錢,儘管我最好還給回來!
我用
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
if(touch.phase==UITouchPhaseBegan){
//find first response view
for (UIView *view in [self.view subviews]) {
if ([view isFirstResponder]) {
[view resignFirstResponder];
break;
}
}
}
}
SO我苦苦思索這一點,我想通了..
你不需要其他按鈕或任何東西。
所有你需要做的就是選擇「文件所有者」,在檢查器中從其textField出口(或任何你命名它)拖到你的實際文本框(通過你命名的任何東西)這將是除了任何輸入你已經連線了。
和ofcourse除了控制出口通過backgroundtouched ...的第一件事,我們都試圖
改變類的UIView類UIControl從的識別標籤(的UIView通過檢查改爲UIControl),以文件的所有者督察。 補充一點:
- (IBAction)tabBackground:(id) sender;
您.h文件中。
添加到您的.m文件:
- (IBAction)tabBackgroup:(id) sender {
[nameField resignFirstRespnder];
[numberField resignFirstResponder];
}
您tabBackground從檢查連接,操作中收到部分UIView的(這是一個UIControl),你是好去。
只需在視圖控制器中調用此選項即可隱藏鍵盤。
[self.view endEditing:NO];
一個超級簡單的方法做,這是什麼工作PCheese說。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch * touch = [touches anyObject];
if(touch.phase == UITouchPhaseBegan) {
[self.view endEditing:YES];
}
}
我以前用過[self.view endEditing:YES];
一個按鈕事件,但與以前的答案結合它的工作原理治療。更容易,你不必做任何事情 - 只要把它放在你的.m文件中。此外,這適用於所有(至少,據我所見)文本字段(適用於UITextField和UITextView)。
我知道OP可能不會仍然需要這個,但我只是想分享給他人與同樣的問題。
解決這個問題是使用下面的方法的最適當的方法:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
if(![touch.view isMemberOfClass:[UITextField class]]) {
[touch.view endEditing:YES];
}
}
注:這不會對UIScrollView的情況下工作。
對我來說
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.view endEditing:NO];
}
只需要到self.view工作有一個的UITextField
http://objdev.com/2013/11/Dismissing-iOS-Keyboard-Self-View-EndEditing
爲SWIFT 4.0
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first
if touch?.phase == UITouchPhase.began {
touch?.view?.endEditing(true)
}
}
但是,在調用此resignFirstResponder 。如何知道用戶觸摸了UIView? – nbojja 2009-06-08 06:09:31
我已編輯帖子,在touchesBegan中包含一個示例。 – PCheese 2009-06-08 06:37:01
嘿..感謝您的幫助..它與UIView很好地合作。但我有另一個場景,我在UITableView中有文本框。在這種情況下,你的代碼不工作。我對iPhone開發非常陌生,所以請...... – nbojja 2009-06-08 07:13:30