自定义UITextField未显示

时间:2013-11-04 15:49:02

标签: ios uitableview uitextfield

我正在尝试创建一个显示日期选择器而不是键盘的自定义UITextField。我已经将故事板中的文本字段更改为使用DateTextField自定义类,但仍然显示键盘而不是日期选择器。请注意,文本字段位于UITableviewCell内。 此外,我不确定这是否是创建工具栏的正确方法:

self.datePickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.superview.bounds.size.width, 44)];



@interface DateTextField : UITextField

@property (strong, nonatomic) UIDatePicker *datePicker;
@property (strong, nonatomic) UIToolbar *datePickerToolbar;

@end


@implementation DateTextField

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.datePicker = [[UIDatePicker alloc] init];
        self.datePicker.datePickerMode = UIDatePickerModeDate;
        self.datePickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.superview.bounds.size.width, 44)];
        [self.datePickerToolbar setBarStyle:UIBarStyleBlackTranslucent];
        UIBarButtonItem *extraSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
        UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(setDatePickerValue:)];
        [self.datePickerToolbar setItems:[[NSArray alloc] initWithObjects:extraSpace, doneButton, nil]];
        self.inputView = self.datePicker;
        self.inputAccessoryView = self.datePickerToolbar;
    }
    return self;
}

@end

2 个答案:

答案 0 :(得分:2)

如果在storyboard / xib中添加文本字段,则不会调用init方法。

尝试使用awakeFromNib。将init方法中的所有代码移至awakeFromNib

    - (void)awakeFromNib
{
    [super awakeFromNib];

   self.datePicker = [[UIDatePicker alloc] init];
    self.datePicker.datePickerMode = UIDatePickerModeDate;
    self.datePickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.superview.bounds.size.width, 44)];
    [self.datePickerToolbar setBarStyle:UIBarStyleBlackTranslucent];
    UIBarButtonItem *extraSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(setDatePickerValue:)];
    [self.datePickerToolbar setItems:[[NSArray alloc] initWithObjects:extraSpace, doneButton, nil]];
    self.inputView = self.datePicker;
    self.inputAccessoryView = self.datePickerToolbar;

}

答案 1 :(得分:0)

为什么不使用UITextField,而不是使用UIButton。它将来节省了大量时间。在这种情况下,UIButton就像一个带有轻击手势识别器的UILabel。

但是,如果您需要使用UITextField,请执行以下操作:

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    if ([textField isEqual:yourTextField])
    {

        // Present the picker here first 
           ...

        // And then...    
        return NO;
    }

    return YES;
}

哦,而且,不要在任何UIView方法中初始化任何-initWith...子类属性。这将触发不一致的视图生命周期。在-viewDidLoad内初始化/访问这些属性。