0

我正在使用 xcode 中的应用程序。我陷入了一个问题。我制作了一个表格视图并制作了一个单元格,我想在其中显示 3 个文本字段和标签。我已经通过编码和分配带有标签的文本字段来完成它。TextFields 键盘是 NumPad,因此我添加了一个用于关闭键盘的工具栏。工具栏有 2 个按钮,一个取消,一个完成。当我点击取消按钮时,它对除最后一个文本字段之外的所有文本字段都有效。

请帮助我。

这是我的代码。

    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];
    }
4

2 回答 2

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;

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

当点击取消按钮时,只需退出所有文本字段,该文本字段当前是否正在使用都没有关系。

我发现属性或实例变量比设置标签属性更清晰、更容易。

于 2012-08-27T00:40:45.747 回答
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];
}

希望能帮助到你

于 2012-08-27T08:51:54.340 回答