2010-01-17 81 views
4

我正在寫一個iPhone應用程序,該應用程序有一個textField供用戶輸入「美元數量」,如12.34帶有0-9和小數點的iPhone鍵盤?

沒有一個SDK鍵盤似乎有小數點。 (或者他們?)所以我決定只讓用戶輸入「1234」,我會爲他添加小數點......因爲他使用EDITING CHANGED鍵入....

但是,每次我的代碼添加小數點...它會生成另一個「編輯已更改」事件...並導致無限循環。

還是有更簡單的方法來做到上述所有?

+1

如果要創建multilanguge應用程序,請記住,在一些國家,逗號(「‘)代替點在小數(’。」) 。 – Jacek 2010-01-17 10:17:45

回答

-1
  1. 使自己的觀點鍵盤(推薦),
  2. 只需使用數字&標點符號鍵盤,放在驗證,
  3. 獨立的「美元」和「仙」文本字段(不推薦)。
+0

1.哇。真? 12個更多的按鈕... 12更多的網點... 12更多的連接... 12更多的發佈...和代碼? ___________________________ 2.鑰匙太小了。 ___________________________ 3.凌亂所以真的沒有「簡單的方法」,在那裏? – Donna 2010-01-17 06:51:38

+0

您可以使用NumPad鍵盤並在鍵盤上放置一個「小數點」按鈕,但我想這將涉及訪問未公開的視圖層次結構。 – kennytm 2010-01-17 07:13:54

0

您可以更改在委託的textField:shouldChangeCharactersInRange:replacementString:UITextField的文本 - 剛剛從這個方法返回NO,但更改文本(加小數點),就像這樣:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSString *newText = [textField.text stringByReplacingCharactersInRange:range withString:string]; 

    // add decimal point to newText 

    textField.text = newText; 
    return NO; 
} 

或者,使用在你的價值靜態BOOL改變處理程序,以表明你自己改變值,somethign像:

-valueDidChange:(id)notify { 
    static BOOL ownChange = NO; 
    if (ownChange) return; 
    ownChange = YES; 
    textField.text = "12.23"; 
    ownChange = NO; 
} 

這是不漂亮,雖然:)

3

請將您的請求作爲iPhone Developer Portal中的錯誤發佈。蘋果不會加那就是簡單地用小數點的數字,直到他們從大量的誰需要一個開發人員聽到一個新的鍵盤類型...

-t

1

您可以添加自定義按鈕,在現有的鍵盤。我已經完成了這個操作,在數字鍵盤上添加了一個「完成」按鈕。爲什麼不添加其他人?您可以將刪除鍵減半,併爲小數點添加半角鍵。無論如何,這裏的代碼:

- (void)textFieldDidBeginEditing:(UITextField *)textField 
    { 
     if (MAKE SURE THIS IS BEING CALLED BY THE CORRECT TEXT FIELD) { 

      // locate keyboard view 
      UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1]; 
      UIView* keyboard; 

      for(int i = 0; i < [tempWindow.subviews count]; i++) { 
        keyboard = [tempWindow.subviews objectAtIndex:i]; 
        // keyboard view found; add the custom button to it 
        if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES) 
         [keyboard addSubview:doneButton]; 
      } 
     } 
     else 
      [doneButton removeFromSuperview]; 
    } 

您需要從圖像創建一個UIButton,因此它看起來像一個關鍵。調用上述函數可將其添加到鍵盤。其實工作得很好。

+0

您的代碼保存按鈕或在xib中創建。唯一的問題是如果鍵盤佈局或樣式改變了,那麼你的按鈕可能會很難看。 – 2010-06-06 17:28:18

+0

我用你的方法,它一直工作到iOS4 ... 看來,[[UIApplication sharedApplication]窗口]現在只有一個元素。 你有什麼想法解決這個問題嗎? – 2010-06-29 09:25:36

+0

對於iOs4,你應該看看:http://www.neoos.ch/news/46-development/54-uikeyboardtypenumberpad-and-the-missing-return-key :) – 2010-07-05 21:20:26

0

它不完美,因爲它位於鍵盤的頂部,但是您可以在inputAccessoryView中添加一個按鈕(已記錄且合法)。我在xib文件中定義了一個工具欄(不是在我的主視圖中),並將touch-up映射到一個將小數點添加到字段的方法。我給它分配在doLoad:

descriptionTextArea.inputAccessoryView = editorControlView; 
7

我認爲這將是很好的指出,作爲新的SDK,你可以使用新UIKeyboardTypeDecimalPad

所以,現在你只需要:

myTextField.keyboardType=UIKeyboardTypeDecimalPad;