我有一个显示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委托方法中调用这些方法。
我的问题是,当首次加载superview时,datepicker的视图是可见的。我尝试将此datepicker视图拖动到所有文本字段和按钮上方的层次结构顶部,但这只会移动它们后面的视图。
我也尝试通过storyboard界面隐藏视图,尝试向viewDidLoad,viewWillAppear添加一个hide方法。我测试的方法是:
[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出口是零,所以这可以解释为什么我遇到了我遇到的问题。再次评论并再次尝试表明它不是零。
我认为这是错误的但不确定如何确保运行viewDidLoad时我的datePickerView不是nil。我不能在文本字段下的表单背景中显示它,我不认为它的颜色变为白色,所以用户看不到它不优雅。
帮助将不胜感激。
亲切的问候
答案 0 :(得分:1)
我猜您datePickerView
的IBOutlet属性为weak
,因此,当您从超级视图中删除它时,它会被销毁。
要么设置strong
,要么使用hidden
属性(记得在hidden
和NO
中设置showPickerView
为YES
hidePickerView
- 您当前添加和删除视图的位置。)
答案 1 :(得分:1)