2012-08-26 132 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; 

现在您对每个文本字段都有参考,现在不需要设置标签属性。您只需要在工具栏上,只需将其添加到视图并在调用时将其显示在键盘上方即可。

当取消按钮被击中时,只需退出所有文本字段,如果该文本字段当前正在使用与否,则无关紧要。

我发现属性或实例变量更清洁,更容易,然后设置标签属性。