UITextField inputView - 所选视图是否可以引用文本字段?

时间:2013-03-29 17:49:13

标签: ios uitextfield uidatepicker

如果我有这样的设置:

- (void)textFieldDidBeginEditing:(UITextField* )textField {

    if (textField.tag == 603) { 

        datePicker = [[UIDatePicker alloc]init];
        [datePicker setDatePickerMode:UIDatePickerModeDate];
        [datePicker setDate:[NSDate date]];
        [datePicker addTarget:self action:@selector(showDate:) forControlEvents:UIControlEventValueChanged];
        textField.inputView = datePicker;

    }

}

在setDate方法中,我可以引用哪个textField UIPickerDate是inputView的?这听起来令人困惑,但就像这样:

- (void) showDate: (UIDatePicker*) myDatePicker {

    NSDate* selected = [myDatePicker date];
    NSString* date = [selected description];
    myTextField = myDatePicker.view //I know this is not a property

}

与UITapGestureRecognizer知道哪个视图正在调用它的意义相同......

Woz的解释:我可以,但它会使应用程序不那么动态。这是安装医疗设备的一种重要形式。要创建表单,我将所有元素属性存储在字典中(标签,类型(文本,复选框,分段控件),表单部分等),然后以正确的顺序将每个字典存储在数组中。我在数组循环中以编程方式构建所有内容。我想我可以继承UITextField ......但你必须承认,知道哪个textfield启动了inputView会很高兴

3 个答案:

答案 0 :(得分:0)

我只是将UITextField子类化并使其工作:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

        self.textColor = [colorManager setColor:66.0 :66.0 :66.0];
        self.font = [UIFont fontWithName:@"Helvetica" size:18.0];
        self.backgroundColor = [UIColor whiteColor];
        self.borderStyle = UITextBorderStyleRoundedRect;
        self.returnKeyType = UIReturnKeyDone;
        self.userInteractionEnabled = YES;

        datePicker = [[UIDatePicker alloc]init];
        [datePicker setDatePickerMode:UIDatePickerModeDate];
        [datePicker setDate:[NSDate date]];
        [datePicker addTarget:self action:@selector(setDate:) forControlEvents:UIControlEventValueChanged];
        self.inputView = datePicker;
    }
    return self;
}

- (void) setDate : (UIDatePicker*) myDatePicker {

    NSDateFormatter* myDateFormatter = [[NSDateFormatter alloc] init];
    [myDateFormatter setDateFormat:@"MM/dd/yyyy"];

    NSString* dateString = [myDateFormatter stringFromDate:myDatePicker.date];
    self.text = dateString;
}

答案 1 :(得分:0)

触发UIDatePicker的UITextField将是当前的firstResponder。您可以使用此信息来标识与当前活动的UIDatePicker关联的文本字段。

答案 2 :(得分:-1)

将标记添加到UIDatePicker并使用该标记从视图中查找textField。

- (void)textFieldDidBeginEditing:(UITextField* )textField {

    if (textField.tag == 603) { 

        datePicker = [[UIDatePicker alloc]init];
        [datePicker setTag:textField.tag];
        [datePicker setDatePickerMode:UIDatePickerModeDate];
        [datePicker setDate:[NSDate date]];
        [datePicker addTarget:self action:@selector(showDate:) forControlEvents:UIControlEventValueChanged];
        textField.inputView = datePicker;

    }

}

- (void) showDate: (UIDatePicker*) myDatePicker {

    NSDate* selected = [myDatePicker date];
    NSString* date = [selected description];

    UITextField *textField = (UITextField *)[self.view viewWithTag:myDatePicker.tag];

}