Как убрать клавиатуру при использовании DecimalPad

У меня есть UITableView с пользовательской ячейкой с TextField. У меня есть DecimalPad, и, как мы все знаем, ключ не сделан. Я ранее решил этот тип проблемы, когда у меня было текстовое поле "Только десятичное значение" в обычном UIView, обработав событие TouchesEnded, а затем проверив, был ли TextField первым ответчиком, и если да, то он уйдет в отставку, но если бы этот метод мог работать сейчас, я не смог бы выяснить, кто TouchesEnded я должен использовать (<<25 > , на котором все представлено, UITableView, Cell, CellControler, TextField. Кажется, я все пробовал).

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

Кто-нибудь?

Ответ 1

Я думаю, что у Дэвида есть лучшая идея - вот какой-то код Monotouch, чтобы вы начали. Вам нужно будет поместить это в контроллер просмотра, где отображается десятичная панель:

UIView dismiss;

public override UIView InputAccessoryView 
{
    get 
    {
        if (dismiss == null)
        {
            dismiss = new UIView(new RectangleF(0,0,320,27));
            dismiss.BackgroundColor = UIColor.FromPatternImage(new UIImage("Images/accessoryBG.png"));          
            UIButton dismissBtn = new UIButton(new RectangleF(255, 2, 58, 23));
            dismissBtn.SetBackgroundImage(new UIImage("Images/dismissKeyboard.png"), UIControlState.Normal);        
            dismissBtn.TouchDown += delegate {
                 textField.ResignFirstResponder();
            };
            dismiss.AddSubview(dismissBtn);
        }
        return dismiss;
    }
}

Ответ 2

Если вы ориентируетесь на iOS 4.0 или выше, вы можете создать inputAccessoryView, содержащий кнопку "Готово", чтобы подключиться к клавиатуре, которая будет отменена клавиатура при нажатии. Здесь приведен пример из документации по созданию простого элемента ввода Access_View.

Ответ 3

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

В Interface Builder измените класс View на UIControl. Это подкласс UIView, поэтому ваша программа будет работать одинаково, но вы также получите стандартные события касания.

Отсюда просто, создайте метод для события Touch Down:
[numberField resignFirstResponder]

Конечно, это может немного отличаться от MonoTouch - к сожалению, я мало что знаю об этом, но хочу помочь. Надеюсь, вы можете использовать эту концепцию и соответствующим образом изменить свой код.

Ответ 4

Или вы можете просто добавить какой-то жест к основному виду. Например:

//Just initialise the gesture you want with action that dismisses your num pad
-(void)textFieldDidBeginEditing:(UITextField *)textField
{    
     UISwipeGestureRecognizer *swipeToHideNumPad = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(hideNumPad:)];
            swipeToHideNumPad.delegate = self;
            swipeToHideNumPad.direction = UISwipeGestureRecognizerDirectionDown;
            [swipeToHideNumPad setNumberOfTouchesRequired:1];

            [self.view addGestureRecognizer:swipeToHideNumPad];
}


//action
- (void)hideNumPad:(UIGestureRecognizer *)gestureRecognizer
{
    [self.amountTextField resignFirstResponder];
}