2012-08-26 135 views
0

我正在使用xcode中的應用程序。我陷入了一個問題。我做了一個表查看並製作了一個單元格,我想要顯示3個textFields和Labels。我已經通過編碼完成了這項工作,併爲其分配了帶有標籤的textField。 TextFields鍵盤是NumPad,因此我添加了一個用於解除鍵盤的工具欄。工具欄有2個按鈕,一個取消,一個完成。當我點擊取消按鈕它劑量工作的所有textFields除了最後一個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]; 
    } 
+0

是否cancelNumberPad方法被調用,當你觸摸取消按鈕?它的名字叫做 – mark

+0

。但是控制轉到switch語句中的情況3。這是最後一個文本字段和取消按鈕在那裏工作。然而它的dosent工作的前兩個文本字段 –

+0

使用委託代碼像[txtfieldStreet setDelegate:self]; – Vishal

回答

0

另一種方式應該是通過所有視圖的子視圖,檢查它是否是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]; 
} 

東西希望它可以幫助

1

當您按下取消按鈕時,您調用[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; 

現在您對每個文本字段都有參考,現在不需要設置標籤屬性。您只需要在工具欄上,只需將其添加到視圖並在調用時將其顯示在鍵盤上方即可。

當取消按鈕被擊中時,只需退出所有文本字段,如果該文本字段當前正在使用與否,則無關緊要。

我發現屬性或實例變量更清潔,更容易,然後設置標籤屬性。