Скрыть клавиатуру, когда пользователь касается uiview

Для меня причина в том, что я одновременно открыл один и тот же файл в обоих редакторах Primary Editor и Assistant Editor . Как только я закрыл помощника редактора, он прошел. (Версия Xcode 7.2.1)

29
задан nbojja 8 June 2009 в 05:54
поделиться

11 ответов

Используйте resignFirstResponder в touchesBegan, например так:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch * touch = [touches anyObject];
    if(touch.phase == UITouchPhaseBegan) {
        [self.myTextField resignFirstResponder];
    }
}

Вам может потребоваться вызвать это в нескольких текстовых полях, если вы не уверены, где в данный момент находится фокус; Я не проверял этот случай.

Кроме того, в Интерфейсном Разработчике вам необходимо включить флажок «Взаимодействие с пользователем включено» для представления или использовать программно:

myView.userInteractionEnabled = YES;
43
ответ дан PCheese 8 June 2009 в 05:54
поделиться

Просто вызовите это в вашем контроллере представления, когда вы хотите скрыть клавиатуру.

[self.view endEditing:NO];

25
ответ дан charliehorse55 8 June 2009 в 05:54
поделиться

Я использую

-(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;
             }
         }
     }
}
14
ответ дан Robert Harvey 8 June 2009 в 05:54
поделиться

это работает для меня

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.view endEditing:NO];
}

нужно только в self.view иметь UItextField

http://objdev.com/2013/11/Dismissing-iOS- Клавиатура-Self-View-EndEditing

2
ответ дан user237474 8 June 2009 в 05:54
поделиться

Спасибо, Бленк, я пытался понять, как это сделать, и не осознавал, что могу поставить кнопку на заднем плане, хороший трюк! Вот мой вклад (новичок в этом сайте и в Cocoa Touch, так что он, возможно, не самый надежный код когда-либо, но он пока работает ...):

Я вызываю этот метод из события touchUpInside в my 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 в представлении, имеющего тег назначенный им (опять же, это можно сделать в Интерфейсном Разработчике).

Мои два цента в любом случае, хотя я бы лучше что-нибудь вернуть!

2
ответ дан Paul J 8 June 2009 в 05:54
поделиться

Супер простой способ сделать это работает на том, что сказал 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, вероятно, все еще не будет нуждаться в этом, но я просто хочу поделиться им с теми же проблемами.

3
ответ дан user1785715 8 June 2009 в 05:54
поделиться

Согласно Начиная разработку iPhone , вы рисуете круглую прямоугольную кнопку, чтобы она покрывала весь ваш пользовательский интерфейс; полный экран. Затем перейдите в меню Layout и нажмите Send to Back . Затем в инспекторе измените тип кнопки с круглого прямоугольника на Пользовательский . Теперь добавьте к этой кнопке событие подкраски и прикрепите его к методу, который его обрабатывает. В теле этого метода убедитесь, что у вас есть операторы:

[myTextFieldOne resignFirstResponder];
[myTextFieldTwo resignFirstResponder];

По сути, отправьте сообщение resignFirstResponder каждому из ваших текстовых полей или любому полю, которое может создать клавиатуру.

Я действительно новичок в iPhone SDK. Я не знаю, является ли это лучшим методом, но он работает, и это то, что я узнал из вышеупомянутой книги. Надеюсь, это поможет.

3
ответ дан Jorge Israel Peña 8 June 2009 в 05:54
поделиться

Для быстрой версии 4.0

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch = touches.first
    if touch?.phase == UITouchPhase.began {
        touch?.view?.endEditing(true)
    }
}
0
ответ дан Tanvir Singh 8 June 2009 в 05:54
поделиться

Измените класс UIView на класс UIControl на вкладке идентификации инспектора. Добавьте это:

- (IBAction)tabBackground:(id) sender;

в ваш файл .h.

Добавьте это в свой файл .m:

- (IBAction)tabBackgroup:(id) sender {
    [nameField resignFirstRespnder];
    [numberField resignFirstResponder];
}

Подключите ваш tabBackground из инспектора, раздел «Полученные действия» к UIView (который является UIControl), и все готово. ]

1
ответ дан EDUsta 8 June 2009 в 05:54
поделиться

Наиболее подходящим способом решения этой проблемы является использование следующего метода:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    if(![touch.view isMemberOfClass:[UITextField class]]) {
        [touch.view endEditing:YES];
    }
}

Примечание: это не работает на экземплярах UIScrollView.

1
ответ дан ArtSabintsev 8 June 2009 в 05:54
поделиться

Так что я мучился по этому поводу, и я понял это.

Вам не нужна другая кнопка или что-то еще.

Все, что вам нужно сделать, это выбрать «Владелец файлов», в инспекторе перетащить из его выхода textField (или как вы его назвали) в ваше фактическое текстовое поле (через то, что вы назвали его) Это будет в дополнение к все, что вы уже подключили.

и, конечно же, в дополнение к выходу Control (UIview изменен на UIControl через инспектора) для владельца файлов через backgroundtouched ... первое, что мы все попробовали

2
ответ дан antizyx 8 June 2009 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: