Как получить UITableView для прокрутки вверх, чтобы разместить клавиатуру? - PullRequest
0 голосов
/ 25 января 2011

Кто-нибудь может объяснить, как заставить эти методы работать? Они прекрасно компилируются, но ничего не делают.

Я хочу иметь прокрутку tableView, чтобы моя клавиатура хорошо сидела.

Решения, опубликованные для этой проблемы, сбрасывают contentSizes и подписываются на NSNotfication.Эти три метода выглядят так, как будто они должны делать то, что я ищу, но ничего не происходит.

[self.myTable setContentOffset:CGPointMake(0, -100) animated:YES];

[self.myTable selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop];

[self.myTable scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];

Ответы [ 2 ]

3 голосов
/ 25 января 2011

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

В вашем методе init добавьте следующее:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];

Добавьте это в вашу реализацию (также добавьте в файл заголовка):

- (void)keyboardWillShow:(NSNotification *)notification {
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_3_2
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
#endif
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_3_2
        NSValue *keyboardBoundsValue = [[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey];
#else
        NSValue *keyboardBoundsValue = [[notification userInfo] objectForKey:UIKeyboardBoundsUserInfoKey];
#endif
        CGRect keyboardBounds;
        [keyboardBoundsValue getValue:&keyboardBounds];
        UIEdgeInsets e = UIEdgeInsetsMake(0, 0, keyboardBounds.size.height, 0);
        [[self tableView] setScrollIndicatorInsets:e];
        [[self tableView] setContentInset:e];
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_3_2
    }
#endif
}

И, наконец, в своем методе dealloc добавьте:

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];

Этот код взят из класса ASIAuthenticationDialog из оболочки ASIHTTPRequest Бена Копси. Надеюсь, это поможет.

0 голосов
/ 25 января 2011

Вы можете использовать setFrame, чтобы уменьшить размер UITableView до половины размера экрана.

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