Перемещение вида при активации UITextField Keyboard

Следующая проблема возникает, когда я активирую свой UITextField (лучше, если я просто покажу пару изображений, чем tryUIView, which is nested within my UITableViewController в качестве нижнего колонтитула.

Yikes можно просто удалить этот вопрос. черт побери

-11
источник поделиться
3 ответа

Насколько я понимаю, вы пытаетесь переместить весь вид, когда UITextField становится первым ответчиком (т.е. Добавляет клавиатуру в представление)? Если это так, я бы добавил код в метод делегата UITextField:

#define VIEW_TAG 12345
#define kKeyboardOffsetY 80.0f

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    // get a reference to the view you want to move when editing begins
    // which can be done by setting the tag of the container view to VIEW_TAG
    UIView *containerView = (UIView *)[self.view viewWithTag:VIEW_TAG];
    [UIView animateWithDuration:0.3 animations:^{
        containerView.frame = CGRectMake(0.0f, -kKeyboardOffsetY, containerView.frame.size.width, containerView.frame.size.height);
    }];
}

- (void)textFieldDidEndEditing:(UITextField *)textField {
    UIView *containerView = (UIView *)[self.view viewWithTag:VIEW_TAG];
    [UIView animateWithDuration:0.3 animations:^{
        containerView.frame = CGRectMake(0.0f, self.view.frame.origin.y, containerView.frame.size.width, containerView.frame.size.height);
    }];
}

Вам не нужно использовать метод viewWithTag, но просто нужно получить ссылку на представление контейнера, что также может быть выполнено путем итерации через subviews.

+1
источник

При появлении клавиатуры отрегулируйте высоту стола.

Вот пример из моего проекта.

Во-первых: прослушивание событий клавиатуры:

-(void) viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    //Be informed of keyboard
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardDidHideNotification object:nil];    
}



#pragma mark keyboard

- (void)keyboardDidShow:(NSNotification *)notification
{
    NSDictionary *userInfo = [notification userInfo];
    CGSize size = [[userInfo objectForKey: UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
    CGRect frame = CGRectMake(self.tableView.frame.origin.x,
                              self.tableView.frame.origin.y,
                              self.tableView.frame.size.width,
                              self.tableView.frame.size.height - size.height);
    self.tableView.frame = frame;
}

- (void)keyboardWillHide:(NSNotification *)notification
{
    NSDictionary *userInfo = [notification userInfo];
    CGSize size = [[userInfo objectForKey: UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
    self.tableView.frame = CGRectMake(self.tableView.frame.origin.x,
                                      self.tableView.frame.origin.y,
                                      self.tableView.frame.size.width,
                                      self.tableView.frame.size.height + size.height);
}
0
источник

Я сделал это так, анимированный, чтобы он выглядел хорошо.

Высота клавиатуры составляет 216 пикселей, и для ее остановки требуется.25s.

Вот часть моего кода:

-(void)textFieldDidBeginEditing:(UITextField *)textField {
if (textField.tag == 2) {
    void (^a)(void) = ^(void){
        [UIView animateWithDuration:.25 animations:^{
            RegNrView.frame = CGRectMake(0, -216, 320, 460);
        }
        completion:nil];
    };

    [[NSOperationQueue mainQueue] addOperationWithBlock:a];
}

}

Это позволяет UIView и клавиатуре двигаться в одно и то же время.

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос