我刚刚开始使用Objective-C,我正在开发一款iPhone应用程序。我需要一些Objective-C的帮助

时间:2011-02-23 06:40:31

标签: iphone objective-c xcode ios4

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

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

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

非常感谢任何帮助!

修改:以下是该应用的一些屏幕截图。

App screenshots

3 个答案:

答案 0 :(得分:1)

您需要查看“管理键盘”。

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

--- --- UPDATE

环顾四周,我发现了这个:

iPhone Keyboard Covers UITextField

答案 1 :(得分:1)

这里有很多东西要回答!

重新定位工具栏

要重新定位工具栏,您需要做一些事情:

  • 用户开始使用时收到通知
  • 调整webview的大小并移动工具栏

为了在用户点击您的文字字段时收到通知,您需要:

  • 在控制器中实现UITextFieldDelegate协议(很可能是主视图控制器)。
  • 实施委托方法-textFieldDidBeginEditing:
  • 将控制器对象设置为文本字段的委托。
  • UITextFieldDelegateProtocol Reference应该解释一下。

要调整控件的大小,您需要将它们声明为IBOutlets并在界面构建器中将它们连接起来。您最好的选择是阅读Interface Builder Quick Start Guide

发送数据

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

  • 使用像NSString的{​​{1}}这样的方法作弊并将数据作为“GET”数据发送(如下所示)

    -initWithContentsOfURL:

通过这种方式,您将能够在您的PHP脚本中获取消息,如下所示:

NSString *chatString = [textField stringValue]; //get the chat string
NSString *encodedString = [chatString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; //URL-encode any special characters
NSString *urlToRequest = [NSString stringWithFormat:@"http://mysite.com/chat.php?message=%@", encodedString];
NSURL *requestURL = [NSURL URLWithString:urlToRequest];
NSString *urlResult = [NSString stringWithContentsOfURL:requestURL];

这不是最强大的方式,但对于高中项目来说应该没问题。

更强大的方法是使用用于此目的的可可库。我不会深入研究这些细节,因为它非常复杂,Apple自己的开发人员文档在解释它时做得更好:URL Loading System Programming Guide

编辑:根据Hack Saw的帖子,使用NSNotification确定键盘何时显示更好。通过按照我所描述的方式执行委托方式,只有在选择了 特定文本字段时才会通知您。有关管理键盘的文档,请访问:Text, Web, and Editing Programming Guide for iOS

答案 2 :(得分:1)

这是一种快速移动工具栏的方法。我相信你能够根据自己的需要调整它。

首先,您必须注册键盘通知

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

当然你必须创建另一种隐藏键盘的方法,但这与显示键盘基本相同,所以我将省略它。

为了使事情变得更容易,您可以创建“内容”视图的工具栏和webview子视图。然后,您将调整contentview的高度,自动调整将处理其余部分。

哦,你不应该因为textFieldDidBeginEditing:而调整视图大小。我不知道iPhone,但可以将外接键盘连接到ipad。你可以在没有键盘显示的情况下调整视图大小,在底部留下一个大的空白框架。