UITatePickerView作为UITextField的FirstResponder缺少Month Component

时间:2012-07-12 21:53:19

标签: iphone ios uitableview uidatepicker

我正在实现一个表视图,对于一个特定的表视图单元,有一个文本字段,其第一个响应者需要是一个UIDatePicker。我已经能够实现其中的大部分,但由于某种原因,视图看起来并不完全正确。我一直坚持这个问题,我一直在寻找这个答案。

UIDatepicker in UItextfield in UItableView

截至目前,我已正确显示和消失数据选择器,文本字段的委托正常工作,文本字段可以更新。我的问题是,由于某种原因,日期选择器的Month组件丢失了(我有一张图片,但由于我的代表少于10,我无法发布)。它看起来像是典型的UIDatePicker,但是第一个具有月份的组件是完全空的并且无法滚动。日期和年份组件正常运行。

这就是我创建选择器视图的方式

    cell = [tableView dequeueReusableCellWithIdentifier:InfoIdentifier];
    UILabel *textLabel = (UILabel *)[cell viewWithTag:kInfoLabelTag];
    UITextFieldWithIndex *cellText = (UITextFieldWithIndex *)[cell viewWithTag:kInfoTextboxTag];
    cellText.indexPath = indexPath;

    textLabel.text = @"Birthday";

    UIDatePicker *datePicker = [[UIDatePicker alloc] init];
    datePicker.datePickerMode = UIDatePickerModeDate;
    [datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
    datePicker.tag = indexPath.row;

    cellText.inputView = datePicker;

这是回调方法

-(void)datePickerValueChanged:(id)sender {
NSLog(@"Date Changing");
currentTextField.text = @"new date";
}

辞职第一响应者是有效的,如果我打印日期,则月份存在,所以唯一的问题是月份标签丢失。

我使用Storyboard创建了这个项目,我也在这个项目中使用核心日期。但是,此视图控制器的核心数据部分尚未实现。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

因此,在仔细查看我的代码后,我发现问题是我为UIPickerView创建的类别。

在另一个文件中,我使用类别来覆盖UIPickerView的drawrect:方法,创建了一个自定义选择器视图。在覆盖的方法中,我实际上将一些视图设置为UIPickerView隐藏。虽然该类别仅在其他文件中导入,但类别覆盖方法正在用于UIDatePickerView,因此将第一个组件设置为隐藏。

我的快速修复是简单地将UIPickerView子类化为另一个文件中的特殊选择器,从而隔离了自定义drawRect覆盖。在我这样做之后,我的UIDatePicker正确显示了!