Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
I';我刚开始学习Objective-C和I';我正在开发一款iPhone应用程序。我需要一些关于Objective-C的帮助_Iphone_Objective C_Xcode_Ios4 - Fatal编程技术网

I';我刚开始学习Objective-C和I';我正在开发一款iPhone应用程序。我需要一些关于Objective-C的帮助

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.我需要找到一种方法,在点击“发送”按钮或按下键盘

我14岁,正在开发我的第二个iOS应用程序:我为学校创建的基于网络的聊天室的iPhone版本。我对Objective-C知之甚少,我需要一些帮助。这是一个非常基本的应用程序,我有一个UIWebView,在视图底部有一个工具栏。工具栏包含一个文本字段和一个“发送”按钮。我让UIWebView工作并指向正确的站点,但我需要两件基本的事情:

1。点击文本框时,我需要工具栏将自身重新定位到键盘顶部,同时调整UIWebView的大小以获得正确的空间

2.我需要找到一种方法,在点击“发送”按钮或按下键盘上的“发送”键时,将文本字段的内容在线发布到我的PHP脚本中

任何帮助都将不胜感激

编辑:以下是该应用程序的一些屏幕截图


.

您将想看看“管理键盘”

本质上,您要做的是让textfield的代理处理键盘通知“UIKeyboardWillShowNotification”,并使用它提供的信息将工具栏移动到位,可能还有动画

---更新---

环顾四周,我发现:


这里有很多问题需要回答

重新定位工具栏

要重新定位工具栏,您需要执行以下操作:

  • 在用户开始使用时收到通知
  • 调整webview的大小并移动工具栏
为了在用户点击文本字段时获得通知,您需要:

  • 在控制器(很可能是主视图控制器)中实施
    UITextFieldDelegate
    协议
  • 实现委托方法
    -textfielddebeginediting:
  • 将控制器对象设置为文本字段的委托
  • 我应该解释一下
要调整控件的大小,需要将它们声明为IBOutlets,并在interface builder中连接它们。你最好的办法就是读这本书

发送数据

发送数据将是一件棘手的事情。你可以做几件事:

  • 通过使用
    NSString
    's
    -initWithContentsOfURL:
    (类似以下内容:)之类的方法欺骗并将数据作为“获取”数据发送

通过这种方式,您将能够在php脚本中获得如下消息:

    $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;
}