Как отклонить клавиатуру цифровой клавиатуры, нажав в любом месте - PullRequest
51 голосов
/ 09 августа 2011

Я хотел бы знать самый простой код для отклонения клавиатуры цифровой клавиатуры при нажатии в любом месте вне цифровой клавиатуры.Это простое приложение для ввода числа внутри текстового поля, после чего пользователь может отклонить клавиатуру после того, как пользователь закончит вводить цифры в текстовом поле.Спасибо!:)

Ответы [ 15 ]

0 голосов
/ 18 января 2015

Множество ответов здесь, но все же пришлось изо всех сил пытаться выяснить это с помощью XCode 5. Прочитайте это: https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/GestureRecognizer_basics/GestureRecognizer_basics.html

Добавьте Распознаватель жестов касания в свой UIScrollView.Установите его делегатом в качестве viewcontroller.

Добавьте этот метод:

- (IBAction)tappedSomewhere:(id)sender {
    [self.view endEditing:YES];
}

в ваш код реализации UIScrollView и свяжите его с распознавателем жестов Tap с помощью управляющего щелчка и перетаскивания в код реализации.

Работал на меня.

0 голосов
/ 26 августа 2014

В xcode 5 Используйте Распознаватель жестов касания и объявите в .h с действием выберите имя и в .m

- (IBAction)backgroundTap:(id)sender {
    [self.view endEditing: YES];
}
0 голосов
/ 26 февраля 2014

Если вы создали собственную цифровую клавиатуру или другой поповер, другим решением было бы использовать распознаватель жестов в инициализации UIView, например:

tapper = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
tapper.cancelsTouchesInView = NO;
[self addGestureRecognizer:tapper];

 _yourViewController = [[CustomViewController alloc] init];
_yourPopoverController = [[UIPopoverController alloc] initWithContentViewController:_yourViewController];
_yourPopoverController.popoverContentSize = CGSizeMake(550, 300);
_yourViewController.delegate = self;

И пусть handleSingleTap отклоняет всплывающее окно, если оно отображается, и отменяет редактирование:

- (void)handleSingleTap:(UITapGestureRecognizer *) sender
{
    if ([_yourPopoverController isPopoverVisible]) {
        [_yourPopoverController dismissPopoverAnimated:YES];
    }

    [self endEditing:YES];
}
0 голосов
/ 09 августа 2011

Мне пришлось реализовать аналогичный UX для моего UITableView (внутри которого появляется UITextField).Сначала добавьте UITapGestureRecognizer в tableView.Это начнет перехватывать все нажатия, которые происходят с этого момента.

UITapGestureRecognizer* tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
        [self.tableView addGestureRecognizer:tapGestureRecognizer];
        [tapGestureRecognizer release];

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

Реализация метода handleTap выглядит примерно так:

/*
 In the text editing mode, listens to all taps occurring on the table view to exit the mode. There are two special cases to consider:
 a) Text field's clear button
 b) Text field
 */
-(void)handleTap:(UITapGestureRecognizer*)tapRecognizer 
{
    if(tapRecognizer.state == UIGestureRecognizerStateEnded) 
    {

            //Figure out where the user tapped
            CGPoint p = [tapRecognizer locationInView:textField];
            CGRect textFieldBounds = textField.bounds;
            CGRect clearButtonBounds = CGRectMake(textFieldBounds.origin.x + textFieldBounds.size.width - 44, textFieldBounds.origin.y, 44, textFieldBounds.size.height); 

            if(CGRectContainsPoint(clearButtonBounds, p))
                textField.text = @"";

            if(CGRectContainsPoint(textFieldBounds, p))
                return;

        [textField resignFirstResponder];
        //remove the tap gesture recognizer that was added.
        for(id element in self.tableView.gestureRecognizers)
        {
        if([element isKindOfClass:[UITapGestureRecognizer class]])
        {
            [self.tableView removeGestureRecognizer:element];
        }
        }
    }
        [self commitNewText];
    }
}

HTH.Отметьте это как ответ, если вам это нравится.

-Акшай

0 голосов
/ 09 августа 2011

Обычно, когда пользователь нажимает кнопку «Отмена», я использую это, чтобы закрыть клавиатуру -

- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar
{
    NSLog(@"cancel clicked");
    [searchBar resignFirstResponder]; // dismiss keyboard
    return;
}

Если вы хотите сделать это, когда пользователь касается области клавиатуры, вам нужно реализовать touchesEnded и поместить этот код туда -

/* Delegate for when touch ends.  */
-(void)touchesEnded:(NSSet *)touches 
          withEvent:(UIEvent *)event
{
    [searchBar resignFirstResponder];
}

Я сам не пробовал этого, но я считаю, что это должно сработать ...

...