Как убрать клавиатуру при использовании 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];
}