Настройка интерфейса при появлении клавиатуры для UITextField или UITextView - PullRequest
6 голосов
/ 31 декабря 2008

У меня есть таблица с каждой ячейкой, содержащей метку и текстовое поле. Проблема в том, что когда я иду редактировать последний ряд, клавиатура скрывает нижнюю часть таблицы, и я не вижу, что набирается. Как мне переместить мой интерфейс над клавиатурой, чтобы я мог видеть, что набирается?

Спасибо, Мустафа

Ответы [ 7 ]

10 голосов
/ 31 декабря 2008

Вы хотите зарегистрировать свой viewController для событий UIKeyboardDidShowNotification и UIKeyboardWillHideNotification. Когда вы получите это, вы должны отрегулировать границы вашего стола; клавиатура имеет высоту 170 пикселей, поэтому просто уменьшите или увеличьте границы таблицы соответствующим образом, и она должна правильно адаптироваться к клавиатуре.

5 голосов
/ 25 августа 2010

Эта проблема является сложной в зависимости от вашего сценария пользовательского интерфейса. Здесь я буду обсуждать сценарий, в котором UITextField или UITextview находится в UITableViewCell.

  1. Вам необходимо использовать NSNotificationCenter для обнаружения события UIKeyboardDidShowNotification. см. http://iosdevelopertips.com/user-interface/adjust-textfield-hidden-by-keyboard.html. Вам необходимо уменьшить размер кадра UITableView, чтобы он занимал только область экрана, которая не покрыта клавиатурой.

    1. Если вы коснетесь UITableViewCell, ОС автоматически разместит ячейку в пределах области просмотра UITableView. Но это не происходит, когда вы касаетесь UITextView или UITableViewCell, даже если они находятся в UITableViewCell.

Вам нужно позвонить

[myTableView selectRowAtIndexPath:self.indexPath animated:YES scrollPosition:UITableViewScrollPositionBottom];` 

, чтобы программно «коснуться» ячейки.

Если вы реализуете обе точки, вы увидите положение UITextView / Field прямо над клавиатурой. Имейте в виду, что UITableViewCell, в котором находится UITableView / Field, не может быть выше, чем «не покрытая» область. Если это не так для вас, есть другой подход, но я не буду обсуждать здесь.

1 голос
/ 31 декабря 2008
0 голосов
/ 08 апреля 2013
tabelview.contentInset =  UIEdgeInsetsMake(0, 0, 210, 0);
[tableview scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:your_indexnumber inSection:Your_section]
                 atScrollPosition:UITableViewScrollPositionMiddle animated:NO];

попробуйте это мое кодирование, это поможет вам

0 голосов
/ 31 мая 2012
     [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(keyboardWasShown:)
                                                     name:UIKeyboardDidShowNotification
                                                   object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(keyboardWasHidden:)
                                                     name:UIKeyboardDidHideNotification
                                                   object:nil];
        keyboardVisible = NO;

- (void)keyboardWasShown:(NSNotification *)aNotification {
    if ( keyboardVisible )
        return;

    if( activeTextField != MoneyCollected)
    {
        NSDictionary *info = [aNotification userInfo];
        NSValue *aValue = [info objectForKey:UIKeyboardBoundsUserInfoKey];
        CGSize keyboardSize = [aValue CGRectValue].size;

        NSTimeInterval animationDuration = 0.300000011920929;
        CGRect frame = self.view.frame;
        frame.origin.y -= keyboardSize.height-300;
        frame.size.height += keyboardSize.height-50;
        [UIView beginAnimations:@"ResizeForKeyboard" context:nil];
        [UIView setAnimationDuration:animationDuration];
        self.view.frame = frame;
        [UIView commitAnimations];

        viewMoved = YES;
    }

    keyboardVisible = YES;
}

- (void)keyboardWasHidden:(NSNotification *)aNotification {
    if ( viewMoved ) 
    {
        NSDictionary *info = [aNotification userInfo];
        NSValue *aValue = [info objectForKey:UIKeyboardBoundsUserInfoKey];
        CGSize keyboardSize = [aValue CGRectValue].size;

        NSTimeInterval animationDuration = 0.300000011920929;
        CGRect frame = self.view.frame;
        frame.origin.y += keyboardSize.height-300;
        frame.size.height -= keyboardSize.height-50;
        [UIView beginAnimations:@"ResizeForKeyboard" context:nil];
        [UIView setAnimationDuration:animationDuration];
        self.view.frame = frame;
        [UIView commitAnimations];

        viewMoved = NO;
    }

    keyboardVisible = NO;
}
0 голосов
/ 01 января 2009

Удаление / комментирование строк, где изменяется прямоугольная высота, похоже, решает проблему Спасибо.

Модифицированный код:

# define kOFFSET_FOR_KEYBOARD 150.0     // keyboard is 150 pixels height

// Animate the entire view up or down, to prevent the keyboard from covering the author field.
- (void)setViewMovedUp:(BOOL)movedUp
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];

// Make changes to the view's frame inside the animation block. They will be animated instead
// of taking place immediately.
CGRect rect = self.view.frame;
CGRect textViewRect = self.textViewBeingEdited.frame;
CGRect headerViewRect = self.headerView.frame;

if (movedUp) {
    // If moving up, not only decrease the origin but increase the height so the view 
    // covers the entire screen behind the keyboard.
    rect.origin.y -= kOFFSET_FOR_KEYBOARD;
    // rect.size.height += kOFFSET_FOR_KEYBOARD;
} else {
    // If moving down, not only increase the origin but decrease the height.
    rect.origin.y += kOFFSET_FOR_KEYBOARD;
    // rect.size.height -= kOFFSET_FOR_KEYBOARD;
}

self.view.frame = rect;
[UIView commitAnimations];

}

0 голосов
/ 31 декабря 2008

Просто убедитесь, что под этим достаточно места для прокрутки. Потому что, насколько мне известно, iPhone автоматически настраивает и отображает текстовое поле с фокусом во время появления клавиатуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...