2011-10-07 62 views
0

我目前正在用UITextField創建一個UITableViewCell。 點擊文本字段,我想調出一個我創建的數字鍵盤。而當我輸入時,textfield應該爲我檢查輸入;點擊其他地方時,鍵盤應該被解僱。帶有TextField的UITableViewCell並檢查輸入

代碼:

UITableViewCell *sizeCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"sizeCell"]; 
sizeCell.textLabel.text = @"Size"; 
UITextField* sizeField = [[UITextField alloc] initWithFrame:CGRectMake(185, 10, 100, 28)]; 
sizeField.text = @"0"; 
sizeField.textAlignment = UITextAlignmentRight; 
sizeField.textColor = [UIColor colorWithRed:50.0/255.0 green:79.0/255.0 blue:133.0/255.0 alpha:1.0f]; 
sizeField.backgroundColor = [UIColor clearColor]; 
sizeField.keyboardType = UIKeyboardTypeDecimalPad; 

[sizeCell.contentView addSubview:sizeField]; 

rows = [[NSArray arrayWithObjects:switchCell, typeCell, sizeCell, nil] retain]; 

我試圖執行UITextFieldDelegate,如:

-(BOOL)textFieldShouldReturn:(UITextField *)textField{ 
    [sizeField resignFirstResponder]; 
    return YES; 
} 

但鍵盤不下去了......

我如何驗證輸入和解僱鍵盤?

回答

3

你從來沒有在你的文本框上設置委託,所以textFieldShouldReturn:被調用。確保你的類符合UITextFieldDelegate,然後執行以下操作:

... 
UITextField* sizeField = [[UITextField alloc] initWithFrame:CGRectMake(185, 10, 100, 28)]; 
sizeField.delegate = self; //This is important! 
sizeField.text = @"0"; 
... 
+0

我添加了該行,但是該文本字段沒有意識到正在觸摸外界。我如何解決這個問題?該代碼發佈的類是NSObject的孩子,我無法正確設置UITapGestureRecognizer – user959974

+0

只需觸摸「UITextField」的外部不會觸發該方法,因爲它觸發你需要a)觸摸另一個UI元素可以成爲第一響應者(例如另一個文本字段)或者b)敲擊鍵盤上的完成按鈕(或等同的ie.search)。 – Joe

+0

現在就工作了,謝謝! – user959974

0

幾個意見:

  1. 作爲另一個海報建議,確保你正確設置鍵盤的代表。
  2. 如果要在鍵盤返回時關閉鍵盤,請確保在自定義鍵盤上有一個鍵盤,並且它已正確設置爲調用...ShouldReturn方法。
  3. 如果您想要在外面輕按,您必須自己做。
  4. 您正在聲明sizeField在您設置它的方法中,然後從該範圍之外的另一個方法調用它。我假設你有一個名爲sizeField的類變量,或者你會得到一個編譯器錯誤。然而,當你像你一樣設置它的時候再次聲明它會影響類變量聲明,所以它永遠不會被設置。順便說一句,這是一個內存泄漏。
  5. 這應該不會影響程序的實際運行,如果其他都是正確的(但它會如果,例如4是問題,而不是固定的),但我認爲這是更好的形式來呼籲[textField resign...]而不是[sizeField resign...]。至少你應該assert(textField == sizeField)