Instagram和Facebook都允许用户对新闻提要进行评论。在评论场景中,他们基本上有一个带有所有评论的UITableView和一个“页脚”,用户可以在其中输入评论并发布。所以“页脚”是一个UIView或UIToolBar,带有UITextField / UITextView和UIButton。看起来真的很简单。好吧,我一直在尝试实现它,键盘不合作。我需要键盘才能隐藏“页脚”。特别是现在在iOS 8中,键盘带有一个用户可以选择显示或隐藏的建议工具栏。当用户输入文本时,所有这些交互使得难以在键盘上方保持“页脚”。每当我想到解决方案时,我就会发现许多错误。
在一个实现中,我使用键盘通知来监听键盘何时启动或关闭(部分基于iPhone Keyboard Covers UITextField)。这种实现的问题在于,当键盘出现时以及“页脚”从屏幕底部爬到键盘顶部时存在大约1到2秒的滞后。第二个问题是当用户拖动建议工具栏以在键入时显示或隐藏它时,它会导致我的“页脚”以不可预测的方式移动:这意味着我需要一些静态变量来精心跟踪与建议工具栏的累积交互修复那个bug。另请注意,我将“页脚”放在引号内。那是因为我不是指UITableView页脚。而是我在UITableView, make footer stay at bottom of screen?
我尝试的另一个实现是使用“页脚”和键盘工具栏。当用户单击页脚的UITextField时,这将导致键盘显示为页脚的副本作为inputAccessoryView。这基本上是在视觉上欺骗用户认为它是与键盘无缝攀爬的同一个页脚。但实际上我使用的是两个复合视图:“页脚”和键盘工具栏。我遇到的第一个问题是我似乎无法以编程方式将工具栏文本字段作为第一个响应者。这实际上曾用于ios-7。但是,自从我更新到iOS-8后,它无效。因此,如果我执行footerTextField.inputAccessoryView=keyboardToolBar
然后在textfield委托方法中检查if(textField==footerTextField){[tooBarTextField becomeFirstResponder];}
,iOS-8只会忽略整个事情,或者更糟糕的是,完全忽略键盘和工具栏,所以事实上键盘永远不会当我点击footerTextField时显示,因为显示和解散发生得如此之快。所以这曾经在iOS-7中工作,但在iOS-8中它不起作用。
第三种方法是让父视图成为TPKeyboardAvoidingScrollView,这样我就会拥有父级,子级UITableView和“footer”。虽然TPKeyboardAvoiding在我的应用程序中的其他场景上工作,无论出于何种原因,它在这里都不起作用。我的猜测是因为我使用UITableView作为UIScrollView的子项之一。
第四种方法是让我的“页脚”成为一个真正的UITableView部分页脚;部分页脚因为我希望它漂浮在底部。部分页脚的问题在于它们不会粘在底部,这会在您滚动表格时产生视觉上不稳定的用户体验。
好的,所以我说了很多。最后,有没有人实现类似Facebook的/ Instagram的NewsFeed评论场景?如果是的话,请你帮我吗?
回顾一下:Facebook / Instagram输入文本字段随文本增长;无论键盘的建议工具栏是显示还是隐藏,都会粘在键盘的顶部;当键盘消失时,它会粘在屏幕的底部。