0

我确实了解如何根据以下问题进行UIKeyboard推高,UIView如果活动UITextView被阻止了UIKeyboardHow to make a UITextField move up when keyboard is present? .

我想知道的是,从设计的角度来看,您如何实现keyboardDidShowkeyboardDidHide方法,以便您的应用程序中的所有视图,无论它们是UIViewUITableView还是UIScrollView全部具有此功能,因此您需要实现这些方法只有一次?

我能想到的唯一方法是将UIViewControlleralways 的 view 属性设置为 a UIView,如果您有 aUIViewController需要 a UIScrollViewor UITableView,只需将其作为子视图附加到 this 上。然后如果UITextView被阻止,只需向上移动父UIView级,这样它就会移动所有附加到它的视图。

这听起来像是一个好计划,还是值得?还有其他人有其他想法吗?

4

2 回答 2

2

这有点老了,但它是一篇关于使用 firstResponder 方法告诉视图向上滑动的好文章。我个人喜欢将我的 UITextField 放在父容器中并将其全部向上移动。但是,我不建议将所有内容都放在那里并将其全部向上移动,因为 UITextField 在键盘上方“感觉”更好。但我确实喜欢背景或某些项目与 UITextField 一起向上移动。

见下文:http ://cocoawithlove.com/2008/10/sliding-uitextfields-around-to-avoid.html

这是一个很好的实现,它根据它所在的屏幕部分(上、中、下)向上移动字段。效果很好。可能需要更新最新的 SDK,但应该很容易。

于 2012-06-07T03:04:35.327 回答
0

在对此进行试验时,我注意到如果您想创建一个实现此功能的 BaseViewController 以适用于从它继承的所有内容,您必须在 UIViewController 的 view 属性之上附加另一个视图才能使其工作。原因是,如果您在键盘出现时向上推 UIViewController 的 view 属性,那么如果应用程序从活动状态恢复并且变得混乱,它会自行重置。

但是,问题在于,现在在您的所有子类中,您必须将子视图附加到这个新视图属性而不是常规视图属性。此外,您可能必须创建一个自定义 UITableViewController ,它将从您的 BaseViewController 类继承,以便它可以继承键盘通知方法。

最终,我发现在 UIViewController 的属性之上为一堆不同的场景设置另一个视图并不是最糟糕的主意。制作自定义 UITableViewController 也没什么大不了的。因此,如果您的应用程序中有很多文本字段,这可能不是最糟糕的方法。

于 2012-06-24T09:47:31.957 回答