簡體   English   中英

TextField鍵盤無法關閉

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM