Переместите UIButton над клавиатурой при нажатии на UITextField

У меня есть 3 текстовых поля и 2 кнопки. Когда я нажимаю на текстовое поле, появляется клавиатура, а 2 кнопки скрыты из-за клавиатуры. Можно ли переместить кнопки над клавиатурой и когда клавиатура уйдет, кнопки должны вернуться в исходное положение.


person iDeveloper    schedule 10.03.2016    source источник


Ответы (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.

person Awesome.Apple    schedule 10.03.2016

Лучший способ сделать это — использовать библиотеку, вот ссылка https://github.com/michaeltyson/TPKeyboardAvoiding, все, что вам нужно сделать, это взять все ваши текстовые поля и кнопки в UIScrollView и назначить класс scrollview как «TPKeyboardAvoidingScrollView» в раскадровке.
В классе контроллера представления не будет строк кода для управления вашими требованиями и там, где вы хотите сделать это во всем приложении вы можете аналогичным образом.

person Milan Gupta    schedule 10.03.2016
comment
Я сомневаюсь, что это лучший способ добиться этого. Это, безусловно, может быть простым способом, но добавление сторонней библиотеки для такой небольшой задачи сопряжено с дополнительными затратами. - person UditS; 10.03.2016
comment
Для этого нужно добавить только один класс из этой библиотеки, и он вряд ли имеет размер 8 КБ, и, кроме того, добавление этого одного класса экономит много ручного кодирования и времени, поэтому я считаю, что его стоит использовать. - person Milan Gupta; 10.03.2016
comment
Ну, я лично пробовал, и это не простое решение. Я сделал то, что вы и рекомендации по использованию предложили, и у меня произошел сбой. Я не трачу время на изучение того, как интегрировать библиотеку для чего-то, что можно легко сделать нативно. - person UditS; 10.03.2016
comment
ладно это хорошо. Когда я впервые использовал библиотеку, интеграция едва ли заняла 15 минут. В любом случае, добиться этого самостоятельно не так уж и плохо. Удачи. - person Milan Gupta; 10.03.2016

Да, вы можете обновить рамки/ограничения вида, чтобы кнопки отображались пользователю.

Кроме того, вы можете создать панель инструментов, в которой будут эти кнопки. Вы можете добавить панель инструментов над клавиатурой, когда текстовые поля находятся в фокусе.

Это будет лучший пользовательский опыт.

person Harshavardhan    schedule 10.03.2016
comment
у меня есть цвет и размер для кнопок. Панель инструментов этого не показывает. Он покажет стандартные - person iDeveloper; 10.03.2016
comment
Поэтому вам нужно обновить рамки/ограничения текстового поля и кнопок. - person Harshavardhan; 10.03.2016

Лучше используйте 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()
    }
person Chamath Jeevan    schedule 10.03.2016