0

如果我有这样的设置:

- (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 方法中,我可以引用 UIPickerDate 是哪个 textField 的 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 ......但你必须承认很高兴知道哪个文本字段启动了 inputView

4

3 回答 3

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;
}
于 2013-03-29T19:19:48.847 回答
0

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

于 2013-03-29T19:43:52.243 回答
-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];

}
于 2013-03-29T18:53:35.420 回答