У меня есть UITextField
, который использует пользовательский UIPickerView
в своем inputView
, чтобы ограничить пользователя несколькими параметрами, функционирующими аналогично раскрывающемуся списку. При использовании с аппаратной клавиатурой, подключенной через Bluetooth, аппаратная клавиатура переопределяет (и скрывает) мой inputView
. Однако связанный inputAccessoryView
остается. Когда я нажимаю кнопку «клавиатура» на моей аппаратной клавиатуре (которая обычно отображает экранную клавиатуру по умолчанию для ванильной UITextField
), все работает так, как ожидалось. (Под этим я подразумеваю, что мой inputView
снова виден.) В предыдущей версии iOS (т.е. 7 и ниже) inputView
всегда отображался при вызове.
Я временно решил проблему, заменив UIKeyboardType
UITextField
с UIKeyboardTypeDefault
на UIKeyboardTypeTwitter
, но это будет работать только в том случае, если аппаратная клавиатура не распознается как клавиатура по умолчанию для этого конкретного UIKeyboardType
. Код pickerTextField.keyboardType = UIKeyboardTypeTwitter;
(см. примерно 2/3 кода ниже). При дальнейшем тестировании это частичное решение не так полезно, как кажется.
Как правильно отображать inputView
во всех ситуациях при использовании аппаратной клавиатуры?
Соответствующий фрагмент кода:
-(int)setUpPickerWheelAtXLoc:(int)xLoc andYLoc:(int)yLoc {
int qwidth = width - (xLoc - FORMBORDERLEFT);
// Set up inputView (pickerView) to replace the keyboard
self.pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(xLoc, yLoc, qwidth, height)];
self.pickerView.delegate = self;
self.pickerView.dataSource = self;
self.pickerTextField = [[UITextField alloc] initWithFrame:CGRectMake(xLoc, yLoc, qwidth, 32)];
self.pickerTextField.delegate = self;
pickerTextField.borderStyle = UITextBorderStyleRoundedRect;
pickerTextField.layer.borderWidth = 0.3f;
pickerTextField.layer.borderColor = [[UIColor blackColor] CGColor];
pickerTextField.textColor = [UIColor blackColor];
pickerTextField.font = [UIFont systemFontOfSize:XXLARGEFONTSIZE];
pickerTextField.placeholder = @"Tap to choose from list...";
// Add pickerView as inputView
pickerTextField.inputView = self.pickerView;
pickerTextField.keyboardType = UIKeyboardTypeTwitter; // Suggested temporary solution
// Setup inputAccessoryView (Done button)
UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[doneButton addTarget:self action:@selector(pickerDoneButtonPressed) forControlEvents:UIControlEventTouchUpInside];
[doneButton setTitle:@"Done" forState:UIControlStateNormal];
doneButton.titleLabel.font = [UIFont systemFontOfSize:XXLARGEFONTSIZE];
doneButton.frame = CGRectMake(0,0,100,44);
[doneButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentRight];
doneButton.contentEdgeInsets = UIEdgeInsetsMake(0,0,0,20);
doneButton.backgroundColor = [UIColor lightGrayColor];
pickerTextField.inputAccessoryView = doneButton;
return xLoc + qwidth;
}
Дополнительная информация. Проверив несколько других мест, я подтвердил, что это происходит как минимум в одном продукте Apple. (В приложении/странице «Создать новый Apple ID» на iPhone 6 в версии 8.0.2. См. окна выбора даты рождения для месяца и дня.)