我有一个有点复杂的iOS视图层次结构。一段文字是可编辑的UITextField。当用户触摸它时,它成为第一响应者,并且是可编辑的。
不过,最好的做法是:最好的做法是在编辑控件之外的任何地方进行触摸会导致第一响应者辞职并结束编辑。实现这一目标的最佳方法是什么?
我尝试过的技巧:
exclusiveTouch
属性阻止用户与其他控件交互,但不会导致编辑结束。同时禁止用户与我的工具栏“完成”按钮进行交互。我缺少这个问题的优雅解决方案吗?我认为这一定是一个常见的设计问题。
感谢。
答案 0 :(得分:0)
在textview周围平铺4个“透视”视图以捕获/忽略触摸。不需要修改或“提升”textview,并且可以以相当模块化的方式添加到父视图中。
如果不知道面具将覆盖什么以及面具不会覆盖什么,则无法屏蔽区域。所以任何解决方案都需要足够的范围来收集这两个边界。将文本向上传递,或者向下传递视图rect / region,或者将两者传递给中间的某些东西。如果不是文本视图的控制器,那么要覆盖的东西的控制器似乎是合并两个区域或区域的好地方。
答案 1 :(得分:0)
如果您将基本视图更改为UIControl
,则可以向该图层添加IBAction
,以便将文本字段作为第一响应者进行重新设置。
此外,如果您有多个触摸事件,请确保触摸时每个becomeFirstResponder
。
我希望有更多细节来证明我的解释xD
答案 2 :(得分:0)
问题的核心是什么构成“最佳实践”。键盘保持不动,除非用户解雇它是故意的。例如,许多应用程序需要用户能够在仍然在文本字段中工作时点击按钮。
键盘有一个Return按钮。 “最佳实践”是通过辞职第一响应者来响应用户点击该按钮。否则,您应该将键盘留在那里,因为这是用户期望的。
但是,如果你坚持按照自己的方式去做,那就有一个简单的解决方案:在背景视图上放置一个UITapGestureRecognizer。如果用户点击背景或界面中的任何按钮或类似按钮,将触发其处理程序。因此,假设您保留了第一个响应者的记录,您可以将resignFirstResponder发送给轻击手势识别器处理程序中的第一个响应者。