如何让UITableView向上滚动以容纳键盘?

时间:2011-01-25 00:18:08

标签: ios uitableview

任何人都可以解释如何让这些方法发挥作用吗? 他们编译得很好但他们没有做任何事情。

我想让我的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 个答案:

答案 0 :(得分:3)

您发布的代码对于调试您所做的错误是完全不完整的,因为它只存在于所需内容的一部分。请查看这是否是您正在寻找的解决方案?

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];

此代码来自Ben Copsey的ASIHTTPRequest包装器的ASIAuthenticationDialog类。希望它有所帮助。

答案 1 :(得分:0)

您可以使用setFrame将UITableView的大小设置为屏幕大小的一半。