У меня есть UITextField
, который использует свой UIPickerView
в своем inputView
, чтобы ограничить пользователя несколькими параметрами, работающими аналогично выпадающему списку. При использовании с аппаратной клавиатурой, подключенной через Bluetooth, аппаратная клавиатура переопределяет (и скрывает) мой inputView
. Однако связанный с ним inputAccessoryView
остается. Когда вы нажимаете кнопку «клавиатура» на моей аппаратной клавиатуре (которая обычно отображает экранную клавиатуру по умолчанию для ванили UITextField
), все работает так, как ожидалось. (Под этим я подразумеваю, что мой inputView
снова виден.) В предыдущей версии iOS (т. Е. 7 и ниже) inputView
всегда отображался при вызове.Храните аппаратную клавиатуру (bluetooth) от переопределения входа в iOS 8
я временно решил проблему, установив UITextField
«s UIKeyboardType
от 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. См. «Дата рождения» для месяца и дня.)
У меня есть причина подозревать, что это та же причина для помех от установленных пользовательских клавиатур, таких как Swype. См. Http://stackoverflow.com/q/26020956/650365 – Maple
Я также хотел бы найти решение для этого. Пользовательские виды ввода должны отображаться независимо от наличия аппаратной клавиатуры. – albertamg