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

问题描述:

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

我需要的工具栏时,文本框被窃听,还调整了自身重新定位到键盘的顶部UIWebView的正确空间。

2.我需要找到一种方法,我的文本字段的内容张贴到我的PHP脚本在网上当“发送”按钮被点击或“发送”键盘上的键是按下。

任何帮助将不胜感激!

编辑:下面是应用程序的一些截图。

App screenshots

你会想看看“管理键盘”。

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

--- UPDATE ---

看,我发现这一点:

iPhone Keyboard Covers UITextField

很多的东西在这里回答!

重新定位工具栏

要重新定位工具栏,你需要做的几件事情:

  • 得到通知,当用户开始使用它
  • 调整您的WebView和移动你工具栏

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

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

要调整您的控件大小,您需要将它们声明为IBOutlets并将它们连接到界面构建器中。这个最好的办法是阅读Interface Builder Quick Start Guide

发送数据

发送数据将是较为复杂的位。一对夫妇的事情可以做:

  • 的欺诈行为及使用方法类似NSString-initWithContentsOfURL:(这样的事情:)

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

发送的数据为“GET”数据通过做这种方式,您将能够得到的消息在你的PHP脚本像这样:

$encoded_message = $_GET['message']; 
    $message = urldecode($encoded_message); 

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

你可以做到这一点的更健壮的方式是通过使用用于该可可库。我不会深入研究这些细节,因为它非常复杂,而且Apple自己的开发人员文档可以更好地解释它:URL Loading System Programming Guide

编辑:根据Hack Saw的帖子,使用NSNotification确定键盘显示的时间是更好。通过如我所描述的做事委托的方式,你只会当特定文本字段中选择通知。有关管理键盘的文档可以在这里找到:Text, Web, and Editing Programming Guide for iOS

+0

很好的回答。但你也可以使用标签值来找出哪些字段标签 - 因此你可以使用'UITextViewDelegate'协议,没有烦恼。 – 2011-02-23 08:05:11

+0

实际上,发送textFieldDidBeginEditing方法的textfield将提供问题指针中的textfield作为参数。你可以使用它来获取你需要的所有信息。 – 2011-02-23 08:06:41

+0

是的,如果您有多个文本字段,那么您可以将您的控制器设置为所有人的代表并使用该参数。尽管如此,捕捉NSNotification更好,因为它会在任何时候通知您*键盘显示的时间,而不仅仅是我们期望它显示键盘的事件(例如,当成为第一响应者时)。还要考虑@ fluchtpunkt关于iPad的观点,不一定必须展示键盘来接受用户输入。 – arrtchiu 2011-02-23 08:31:37

这是一个快速不偏好的方式来移动工具栏。我相信你能够适应你的需求。

首先你要为键盘通告

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

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

为了让事情更容易一点,您可以制作“内容”视图的工具栏和web视图子视图。然后,您可以调整contentview的高度,并自动调整余量。

哦,你不应该调整的观点只是因为textFieldDidBeginEditing:。我不知道iphone,但可以将外部键盘连接到ipad。而且,如果不显示键盘,您可以调整视图的大小,在底部留下一个大的空白帧。