我有一个包含多个文本字段的视图,并且我想要执行与单击文本字段时“联系人”应用程序所执行的操作相同的效果,否则该文本字段会在键盘出现时隐藏。当我解雇键盘时,我计划正确地将视图向下移动。移动视图以适应键盘
我怀疑我是通过更改Frame值来做到这一点的,但我需要这样做才能让它动起来,这样它就不会对用户产生冲击。
建议?例子?
我有一个包含多个文本字段的视图,并且我想要执行与单击文本字段时“联系人”应用程序所执行的操作相同的效果,否则该文本字段会在键盘出现时隐藏。当我解雇键盘时,我计划正确地将视图向下移动。移动视图以适应键盘
我怀疑我是通过更改Frame值来做到这一点的,但我需要这样做才能让它动起来,这样它就不会对用户产生冲击。
建议?例子?
在UIScrollView中包装您的视图的确是要走的路。与textFieldDidEndEditing
代表一样,您也可以订阅UIKeyboardDidHideNotification
和UIKeyboardDidShowNotification
,并且当您收到关于键盘确实隐藏/显示的通知时,请适当地滚动您的视图。如果你需要它,我可以张贴的键盘通知代码示例:)
编辑 想我会反正张贴代码 - 有人可能会发现它的帮助:
您需要申报通知监听器:
NSObject hideObj = NSNotificationCenter.DefaultCenter.AddObserver(UIKeyboard.DidHideNotification, HandleKeyboardDidHide);
NSObject showObj = NSNotificationCenter.DefaultCenter.AddObserver(UIKeyboard.DidShowNotification, HandleKeyboardDidShow);
那么你的操作方法看起来是这样的:
void HandleKeyboardDidShow(NSNotification notification)
{
scrollView.ScrollRectToVisible(textfield.Frame, true);
}
void HandleKeyboardDidHide(NSNotification notification)
{
// scroll back to normal
}
编辑2
所以,如果你想删除的观察员视图时被破坏,首先你需要确保你添加的观察者则使用下面的代码删除它们时分配NSObject
S:
NSNotificationCenter.DefaultCenter.RemoveObserver(showObj);
NSNotificationCenter.DefaultCenter.RemoveObserver(hideObj);
希望有帮助。
我刚刚在一个应用程序上做了这个。我使用scrollview来包装整个视图,然后在textFieldDidEndEditing-delegate方法上使用scrollToRectVisible。它非常完美!
有关keyboard management主题的Apple文档非常好,包含大多数情况下的代码(位于底部),您可以将其复制/粘贴到应用程序中。
祝你好运。
我同意观察员的观点,最好是在不再需要的时候去掉它们。另外,UIScrollView.ScrollRectToVisible方法需要两个参数,而不是一个参数。第二个参数是动画。 – 2011-03-03 18:37:37
对不起!我在公共汽车上从手机上完成 - 将在今天早上更正! – Luke 2011-03-04 00:10:29
这非常好,我真的很感激它,我甚至不知道如何连接到UIKeyboard事件。 textFieldDidBeginEditing每次都会触发,这也很棒。 – 2011-03-04 14:26:36