我有一个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;
}
答案 0 :(得分:1)
您可以继承UITextField
并实施
- (BOOL)resignFirstResponder
滚动时可以返回NO
。