I';我刚开始学习Objective-C和I';我正在开发一款iPhone应用程序。我需要一些关于Objective-C的帮助
我14岁,正在开发我的第二个iOS应用程序:我为学校创建的基于网络的聊天室的iPhone版本。我对Objective-C知之甚少,我需要一些帮助。这是一个非常基本的应用程序,我有一个UIWebView,在视图底部有一个工具栏。工具栏包含一个文本字段和一个“发送”按钮。我让UIWebView工作并指向正确的站点,但我需要两件基本的事情: 1。点击文本框时,我需要工具栏将自身重新定位到键盘顶部,同时调整UIWebView的大小以获得正确的空间 及 2.我需要找到一种方法,在点击“发送”按钮或按下键盘上的“发送”键时,将文本字段的内容在线发布到我的PHP脚本中 任何帮助都将不胜感激 编辑:以下是该应用程序的一些屏幕截图I';我刚开始学习Objective-C和I';我正在开发一款iPhone应用程序。我需要一些关于Objective-C的帮助,iphone,objective-c,xcode,ios4,Iphone,Objective C,Xcode,Ios4,我14岁,正在开发我的第二个iOS应用程序:我为学校创建的基于网络的聊天室的iPhone版本。我对Objective-C知之甚少,我需要一些帮助。这是一个非常基本的应用程序,我有一个UIWebView,在视图底部有一个工具栏。工具栏包含一个文本字段和一个“发送”按钮。我让UIWebView工作并指向正确的站点,但我需要两件基本的事情: 1。点击文本框时,我需要工具栏将自身重新定位到键盘顶部,同时调整UIWebView的大小以获得正确的空间 及 2.我需要找到一种方法,在点击“发送”按钮或按下键盘
.您将想看看“管理键盘” 本质上,您要做的是让textfield的代理处理键盘通知“UIKeyboardWillShowNotification”,并使用它提供的信息将工具栏移动到位,可能还有动画 ---更新--- 环顾四周,我发现:
这里有很多问题需要回答 重新定位工具栏 要重新定位工具栏,您需要执行以下操作:
- 在用户开始使用时收到通知
- 调整webview的大小并移动工具栏
- 在控制器(很可能是主视图控制器)中实施
协议UITextFieldDelegate
- 实现委托方法
-textfielddebeginediting:
- 将控制器对象设置为文本字段的委托
- 我应该解释一下
- 通过使用
'sNSString
(类似以下内容:)之类的方法欺骗并将数据作为“获取”数据发送-initWithContentsOfURL:
$encoded_message = $_GET['message'];
$message = urldecode($encoded_message);
这不是最有效的方法,但对于高中项目来说,这应该是好的
更可靠的方法是使用用于此目的的cocoa库。我将不深入探讨这些细节,因为它相当复杂,苹果自己的开发人员文档在解释方面做得更好:
编辑:根据Hack Saw的帖子,使用NSNotification来确定键盘何时显示更好。通过按照我所描述的委托方式进行操作,只有在选择了特定文本字段时才会通知您。有关管理键盘的文档可在此处找到:这是一种快速向上移动工具栏的方法。我相信你能使它适应你的需要 首先,您必须注册键盘通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
然后向上移动工具栏。像这样
- (void)keyboardWillShow:(NSNotification *)notification {
if (keyboardShown) {
return;
}
NSDictionary* info = [notification userInfo];
// Get the size of the keyboard.
NSValue* aValue = [info objectForKey:UIKeyboardFrameBeginUserInfoKey];
CGSize keyboardSize = [aValue CGRectValue].size;
CGRect currentFrame = self.toolbar.frame;
currentFrame.origin.y = currentFrame.origin.y - keyboardSize.height;
[UIView beginAnimations:@"ShowKeyboard" context:NULL];
[UIView setAnimationCurve:[[info objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]];
[UIView setAnimationDuration:[[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]];
self.toolbar.frame = currentFrame;
[UIView commitAnimations];
keyboardShown = YES;
}
当然,您必须创建另一个隐藏键盘的方法,但这与show keyboard基本相同,因此我将省略它
为了让事情变得简单一点,可以将工具栏和webview子视图设置为“内容”视图。然后,您可以调整contentview的高度,而自动调整大小将处理其余部分
哦,您不应该仅仅因为
textfielddebeginediting:
而调整视图的大小。我不知道iphone的情况,但可以将外置键盘连接到ipad。您可以在不显示键盘的情况下调整视图的大小,在底部留下一个大的空白框。回答得好。但是,您也可以使用标记值来确定标记了哪个字段-因此您可以使用UITextViewDelegate
协议而不会遇到任何问题。实际上,发送textfielddibeginediting方法的textfield将提供有问题的textfield指针作为参数。您可以使用它来获取所需的所有信息。是的,如果您有多个文本字段,则可以将控制器设置为所有文本字段的代理,并使用参数。不过,捕捉NSNotification更好,因为它会在显示键盘的任何时候通知您,而不仅仅是针对我们希望它显示键盘的事件(例如当一个人成为第一响应者时)。还要考虑到@fluchtpunkt关于iPad不一定要显示键盘才能接受用户输入的观点。
- (void)keyboardWillShow:(NSNotification *)notification {
if (keyboardShown) {
return;
}
NSDictionary* info = [notification userInfo];
// Get the size of the keyboard.
NSValue* aValue = [info objectForKey:UIKeyboardFrameBeginUserInfoKey];
CGSize keyboardSize = [aValue CGRectValue].size;
CGRect currentFrame = self.toolbar.frame;
currentFrame.origin.y = currentFrame.origin.y - keyboardSize.height;
[UIView beginAnimations:@"ShowKeyboard" context:NULL];
[UIView setAnimationCurve:[[info objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]];
[UIView setAnimationDuration:[[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]];
self.toolbar.frame = currentFrame;
[UIView commitAnimations];
keyboardShown = YES;
}