我正在尝试创建一个显示日期选择器而不是键盘的自定义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
答案 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
内初始化/访问这些属性。