我有一个 uitableview,其中每个单元格都有一个 uitextfield。如果我在表格视图的下方触摸一个文本字段,那么它会将文本字段设置为第一响应者并滚动到它,并且还会向上滚动一个键盘(一切都如预期的那样)。但是,如果键盘动画比表格视图滚动快,那么键盘会暂时覆盖文本字段,从而辞去第一响应者的角色。
很难用一个基本项目或我可以粘贴在这里的任何代码片段来重现,因为问题是每个单元格都在做很多布局,并且它在向上滚动时使其他单元格出列等,这意味着滚动相当慢.
我不介意稍微生涩的滚动,我只是想找到一种方法来确保文本字段保持自己作为第一响应者,即使它暂时被键盘隐藏。
编辑:
如下面的答案所示,我现在正在尝试维护表格视图是否正在滚动,并且仅在滚动=否时才允许第一响应者辞职。UITableViewDelegate 的代码如下,但现在的问题是表格视图的非动画移动(即scrollToRowAtIndexPath...animated:NO)导致scrollViewDidScroll,而不是scrollViewDidEndScrollingAnimation。关于如何以一种更笨拙的方式解决这个问题的任何想法?
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
NSLog(@"YES");
self.scrolling = YES;
}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
NSLog(@"NO");
self.scrolling = NO;
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
NSLog(@"NO");
self.scrolling = NO;
}
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
NSLog(@"NO");
self.scrolling = NO;
}