2011-03-03 69 views
4

我有一个包含多个文本字段的视图,并且我想要执行与单击文本字段时“联系人”应用程序所执行的操作相同的效果,否则该文本字段会在键盘出现时隐藏。当我解雇键盘时,我计划正确地将视图向下移动。移动视图以适应键盘

我怀疑我是通过更改Frame值来做到这一点的,但我需要这样做才能让它动起来,这样它就不会对用户产生冲击。

建议?例子?

回答

6

在UIScrollView中包装您的视图的确是要走的路。与textFieldDidEndEditing代表一样,您也可以订阅UIKeyboardDidHideNotificationUIKeyboardDidShowNotification,并且当您收到关于键盘确实隐藏/显示的通知时,请适当地滚动您的视图。如果你需要它,我可以张贴的键盘通知代码示例:)

编辑 想我会反正张贴代码 - 有人可能会发现它的帮助:

您需要申报通知监听器:

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); 

希望有帮助。

+0

我同意观察员的观点,最好是在不再需要的时候去掉它们。另外,UIScrollView.ScrollRectToVisible方法需要两个参数,而不是一个参数。第二个参数是动画。 – 2011-03-03 18:37:37

+0

对不起!我在公共汽车上从手机上完成 - 将在今天早上更正! – Luke 2011-03-04 00:10:29

+0

这非常好,我真的很感激它,我甚至不知道如何连接到UIKeyboard事件。 textFieldDidBeginEditing每次都会触发,这也很棒。 – 2011-03-04 14:26:36

2

我刚刚在一个应用程序上做了这个。我使用scrollview来包装整个视图,然后在textFieldDidEndEditing-delegate方法上使用scrollToRectVisible。它非常完美!

1

有关keyboard management主题的Apple文档非常好,包含大多数情况下的代码(位于底部),您可以将其复制/粘贴到应用程序中。

祝你好运。