【发布时间】:2011-03-03 13:21:37
【问题描述】:
我有一个包含多个文本字段的视图,我想要实现与联系人应用程序在单击文本字段时所做的相同的效果,否则当它出现时会被键盘隐藏。当我关闭键盘时,我计划将视图正确地向下移动。
我怀疑我是通过更改 Frame 值来做到这一点的,但我需要对此进行动画处理,以免对用户造成震动。
建议?例子?
【问题讨论】:
标签: iphone xamarin.ios
我有一个包含多个文本字段的视图,我想要实现与联系人应用程序在单击文本字段时所做的相同的效果,否则当它出现时会被键盘隐藏。当我关闭键盘时,我计划将视图正确地向下移动。
我怀疑我是通过更改 Frame 值来做到这一点的,但我需要对此进行动画处理,以免对用户造成震动。
建议?例子?
【问题讨论】:
标签: iphone xamarin.ios
将视图包装在 UIScrollView 中确实是可行的方法。与textFieldDidEndEditing 委托一样,您可以改为订阅UIKeyboardDidHideNotification 和UIKeyboardDidShowNotification,当您收到键盘确实隐藏/显示的通知时,然后适当地滚动您的视图。如果您需要,我可以发布键盘通知的代码示例:)
编辑 想我还是会发布代码 - 有人可能会觉得它有帮助:
您需要为通知声明监听器:
NSObject hideObj = NSNotificationCenter.DefaultCenter.AddObserver(UIKeyboard.DidHideNotification, HandleKeyboardDidHide);
NSObject showObj = NSNotificationCenter.DefaultCenter.AddObserver(UIKeyboard.DidShowNotification, HandleKeyboardDidShow);
那么您的 Action 方法将类似于:
void HandleKeyboardDidShow(NSNotification notification)
{
scrollView.ScrollRectToVisible(textfield.Frame, true);
}
void HandleKeyboardDidHide(NSNotification notification)
{
// scroll back to normal
}
编辑 2
因此,如果您想在视图被销毁时移除观察者,首先您需要确保在添加观察者时分配NSObjects,然后使用以下代码将其移除:
NSNotificationCenter.DefaultCenter.RemoveObserver(showObj);
NSNotificationCenter.DefaultCenter.RemoveObserver(hideObj);
希望对您有所帮助。
【讨论】:
UIScrollView contentSize 更改为大于屏幕(以适应滚动),然后在文本字段变为活动状态时使用scrollToRect?
我刚刚在一个应用程序上做了这个。我使用滚动视图来包裹整个视图,然后在 textFieldDidEndEditing-delegate 方法上使用 scrollToRectVisible。效果很好!
【讨论】:
关于 keyboard management 主题的 Apple 文档非常好,并且包含适用于大多数情况的代码(在底部),您可以将这些代码直接复制/粘贴到您的应用中。
祝你好运。
【讨论】: