当UITableView中的滚动速度不够快时,UITextField会撤消第一个响应者

时间:2013-07-02 11:19:45

标签: ios objective-c uikit

我有一个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;
}

1 个答案:

答案 0 :(得分:1)

您可以继承UITextField并实施

- (BOOL)resignFirstResponder

滚动时可以返回NO