【发布时间】:2014-02-18 13:26:03
【问题描述】:
我有一个显示 UILabel 和 UITextField 子视图以及 UIImageView 和 2 个 UIButtons 的视图。这些都构成了一个表格。其中一个字段专用于 dd/mm//yyyy 格式的日期输入。
我决定在我的主视图中创建另一个视图(称为 datePickerView),其中包含一个 UIDatePicker 实例。单击上述表单上的日期字段时,将显示带有日期选择器的此视图。单击完成按钮后,视图将再次隐藏/删除。
我有处理这个视图的显示和隐藏的方法:
@property (weak, nonatomic) IBOutlet UIView *datePickerView;
- (void) hidePickerView {
[UIView animateWithDuration:0.5
animations:^{
[[self datePickerView] setFrame:CGRectMake(0, -250, 320, 50)];
} completion:^(BOOL finished) {
[[self datePickerView] removeFromSuperview];
}];
}
- (void) showPickerView {
[[self view] addSubview:[self datePickerView]];
[[self datePickerView] setFrame: CGRectMake(0, -250, 320, 50)];
[UIView animateWithDuration:1.0
animations:^{
[[self datePickerView] setFrame: CGRectMake(0, 152, 320, 260)];
}];
}
我在我的textFieldDidEndEditing 和textFieldShouldBeginEditing UITextField 委托方法中调用这些方法。
我的问题是第一次加载它的超级视图时,日期选择器的视图是可见的。我尝试将此日期选择器视图拖到所有文本字段和按钮上方的层次结构顶部,但这只会改变它们后面的视图。
我也尝试过通过storyboard界面隐藏视图,尝试在viewDidLoad中添加一个hide方法,viewWillAppear。我测试的方法是:
[self datePickerView] removeFromSuperview];
[[self datePickerView] setHidden:YES];
[self hidePickerView];
这些隐藏 datePickerView 没问题,但是当我单击文本字段时 datePickerView 不显示。
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
// missing since date field error checking
if (textField == [self missingSinceField]) {
[self showPickerView];
return NO;
}
return YES;
}
-(void)textFieldDidEndEditing:(UITextField *)textField {
if (textField == [self missingSinceField]) {
[self hidePickerView];
}
}
当我不以任何形状或形式隐藏或删除 datePickerView 并点击它时,datePickerView 加载没问题。
** 就在发布这个问题之前,我在 showDatePicker 方法中设置了一个断点,当我取消注释 [self datePickerView] removeFromSuperview]; 时,我看到我的 datePickerView 出口为零,所以这可以解释我遇到问题的原因。再次评论它并再次尝试显示它不是 nil。
我认为这是问题所在,但不确定如何确保运行 viewDidLoad 时我的 datePickerView 不为零。我不能让它显示在文本字段下的表单背景中,而且我不认为将它的颜色更改为白色以便用户看不到它是不优雅的。
我们将不胜感激。
亲切的问候
【问题讨论】:
标签: objective-c cocoa-touch uiview ios7 uitextfield