У меня есть 3 текстовых поля и 2 кнопки. Когда я нажимаю на текстовое поле, появляется клавиатура, а 2 кнопки скрыты из-за клавиатуры. Можно ли переместить кнопки над клавиатурой и когда клавиатура уйдет, кнопки должны вернуться в исходное положение.
Переместите UIButton над клавиатурой при нажатии на UITextField
Ответы (4)
//Declare a delegate, assign your textField to the delegate and then
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
return YES;
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
[self.view endEditing:YES];
return YES;
}
- (void)keyboardDidShow:(NSNotification *)notification
{
// Assign new frame to your view
[self.view setFrame:CGRectMake(0,-110,320,460)]; //here taken -20 for example i.e. your view will be scrolled to -20. change its value according to your requirement.
}
-(void)keyboardDidHide:(NSNotification *)notification
{
[self.view setFrame:CGRectMake(0,0,320,460)];
}
Редактировать: - Назначить ширину и высоту для просмотра, используя границы [UIScreen mainScreen].size.
Лучший способ сделать это — использовать библиотеку, вот ссылка https://github.com/michaeltyson/TPKeyboardAvoiding, все, что вам нужно сделать, это взять все ваши текстовые поля и кнопки в UIScrollView и назначить класс scrollview как «TPKeyboardAvoidingScrollView» в раскадровке.
В классе контроллера представления не будет строк кода для управления вашими требованиями и там, где вы хотите сделать это во всем приложении вы можете аналогичным образом.
Да, вы можете обновить рамки/ограничения вида, чтобы кнопки отображались пользователю.
Кроме того, вы можете создать панель инструментов, в которой будут эти кнопки. Вы можете добавить панель инструментов над клавиатурой, когда текстовые поля находятся в фокусе.
Это будет лучший пользовательский опыт.
Лучше используйте scrollview или адаптируйте приведенный ниже код для вашего удобства.
override func viewDidLoad() {
super.viewDidLoad()
let tapGesture = UITapGestureRecognizer(target: self, action: "tap:")
view.addGestureRecognizer(tapGesture)
self.txtUserEmail.delegate = self;
self.txtPassword.delegate = self;
}
func tap(gesture: UITapGestureRecognizer) {
self.txtUserEmail.resignFirstResponder()
self.txtPassword.resignFirstResponder()
}