2011-02-23 130 views
1

我14歲,正在開發我的第二個iOS應用程序:我爲我的學校創建的基於Web的聊天室的iPhone版本。我對Objective-C知之甚少,需要一些幫助。這是一個非常基本的應用程序,我有一個UIWebView和視圖底部的工具欄。工具欄包含一個文本字段和一個「發送」按鈕。我有一個UIWebView工作,並指向正確的網站,但我需要兩個基本的東西:我剛開始Objective-C,我正在開發一個iPhone應用程序。我需要Objective-C的一些幫助

我需要的工具欄時,文本框被竊聽,還調整了自身重新定位到鍵盤的頂部UIWebView的正確空間。

2.我需要找到一種方法,我的文本字段的內容張貼到我的PHP腳本在網上當「發送」按鈕被點擊或「發送」鍵盤上的鍵是按下。

任何幫助將不勝感激!

編輯:下面是應用程序的一些截圖。

App screenshots

回答

1

你會想看看「管理鍵盤」。

在本質上,你想要做的是讓textfield的委託處理鍵盤通知「UIKeyboardWillShowNotification」,並使用它提供的信息將工具欄移動到位,可能還有動畫。附近有一座小

--- UPDATE ---

看,我發現這一點:

iPhone Keyboard Covers UITextField

1

很多的東西在這裏回答!

重新定位工具欄

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

  • 得到通知,當用戶開始使用它
  • 調整您的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

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; 
} 
當然

,你必須創建將隱藏鍵盤的另一種方法,但是這是基本相同,顯示鍵盤,所以我會忽略它。

爲了讓事情更容易一點,您可以製作「內容」視圖的工具欄和web視圖子視圖。然後,您可以調整contentview的高度,並自動調整餘量。

哦,你不應該調整的觀點只是因爲textFieldDidBeginEditing:。我不知道iphone,但可以將外部鍵盤連接到ipad。而且,如果不顯示鍵盤,您可以調整視圖的大小,在底部留下一個大的空白幀。

相關問題