[英]TextField Keyboard doesnt dismisses
我正在使用xcode中的應用程序。 陷入一個問題。 我已經制作了一個表格視圖,並制作了一個單元格,我想在其中顯示3個textFields和Labels。 我已經完成了編碼,並為文本字段分配了標簽。 TextFields Keyboard是NumPad,因此我添加了一個用於關閉鍵盤的工具欄。 工具欄有2個按鈕,一個取消,一個完成。 當我點擊“取消”按鈕時,除了最后一個textField之外,所有textField都有效。
請幫助我。
這是我的代碼。
for (int i = 0; i < 3; i++) {
mainTextField = [[UITextField alloc] initWithFrame:CGRectMake(20, (80 + (i * 60)), 280, 30)];
mainTextField.borderStyle = UITextBorderStyleRoundedRect;
mainTextField.textColor = [UIColor blackColor];
mainTextField.font = [UIFont systemFontOfSize:17.0];
mainTextField.backgroundColor = [UIColor whiteColor];
mainTextField.autocorrectionType = UITextAutocorrectionTypeNo;
mainTextField.backgroundColor = [UIColor clearColor];
mainTextField.keyboardType = UIKeyboardTypeNumberPad;
mainTextField.keyboardType=UIKeyboardTypeDecimalPad;
mainTextField.returnKeyType = UIReturnKeyDone;
mainTextField.tag= i+1;
mainTextField.delegate=self;
[self.mainTableView addSubview:mainTextField];
self. numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
self. numberToolbar.barStyle = UIBarStyleBlackOpaque;
self. numberToolbar.items = [NSArray arrayWithObjects:
[[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelNumberPad)],
[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
[[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithNumberPad)],
nil];
[self.numberToolbar setTag:i+1];
[self.numberToolbar sizeToFit];
mainTextField.inputAccessoryView = numberToolbar;
mainTextField.clearButtonMode = UITextFieldViewModeWhileEditing;
mainLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 55+(i*60), 280, 18)];
mainLabel.backgroundColor = [UIColor clearColor];
mainLabel.textAlignment = UITextAlignmentLeft;
mainLabel.tag= i+1;
{
mainLabel.text = [passedValue objectAtIndex:[mainLabel tag]-1];
[self.mainTableView addSubview:mainLabel];
[self configureView];
}
}
-(void)cancelNumberPad{
switch ([self.numberToolbar tag]) {
case 1:
[mainTextField resignFirstResponder];
break;
case 2:
[mainTextField resignFirstResponder];
break;
case 3:
[mainTextField resignFirstResponder];
break;
default:
break;
}
mainTextField.text = @"";
}
-(void)doneWithNumberPad {
NSString *numberFromTheKeyboard = mainTextField.text;
[mainTextField resignFirstResponder];
}
當您單擊取消按鈕時,調用[self.numberToolbar標簽],該標簽始終為3! 您為工具欄擁有一個名為self.numberToolbar的屬性,該屬性僅包含對一個工具欄的引用。
// This loop runs three times, and it just changes the tag of the self.numberToolbar.
// self.numberToolbar is only 1 toolbar and you just keep changing it's tag, the loop stops at
// 2 so the tag is 2 + 1, which is 3.
for (int i = 0; i < 3; i++) {
[self.numberToolbar setTag:i+1];
}
而是只為每個文本字段創建一個屬性或實例變量。
@property (nonatomic, retain) UITextField *textFieldOne;
@property (nonatomic, retain) UITextField *textFieldTwo;
@property (nonatomic, retain) UITextField *textFieldThree;
現在您有了對每個文本字段的引用,現在無需設置tag屬性。 您只需要在工具欄上,只需將其添加到視圖中並在調用時將其顯示在鍵盤上方即可。
當單擊取消按鈕時,只需將所有文本字段都辭職即可,當前是否正在使用該文本字段都沒有關系。
我發現屬性或實例變量更加干凈和容易,然后設置標簽屬性。
另一種方法是遍歷該視圖的所有子視圖,檢查它是否為UITextField,如果不是,則將其關閉。 就像是
-(void)myToolbarAction
{
for(int i=0;i<self.view.subviews.count; i++)
{
if([[self.view.subviews objectAtIndex:i] isKindOfClass:[UITextField class]]
[[self.view.subviews objectAtIndex:i] resignFirstResponder];
}
希望能幫助到你
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.