Как отклонить клавиатуру при использовании DecimalPad - PullRequest
10 голосов
/ 04 апреля 2011

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

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

Любой

Ответы [ 4 ]

12 голосов
/ 04 апреля 2011

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

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;
    }
}
9 голосов
/ 04 апреля 2011

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

3 голосов
/ 04 апреля 2011

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

В Интерфейсном Разработчике измените класс вашего Представления на UIControl.Это подкласс UIView, поэтому ваша программа будет работать так же, но вы также получите стандартные сенсорные события.

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

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

0 голосов
/ 20 июня 2014

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

//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];
}
...