0

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

1 回答 1

1

您可以子类化UITextField并实现

- (BOOL)resignFirstResponder

在那里你可以NO在滚动时返回。

于 2013-07-02T12:06:32.700 回答