我有一个基于视图的应用程序,它有一些文本框,我试图填充一些选择器。例如,其中一个将用于日期选择。我正在使用以下内容将新视图添加到当前视图的底部,然后向上滚动整个视图:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
if(textField == [self date]) {
editingDate = YES;
UIDatePicker *pv = [[UIDatePicker alloc] initWithFrame:CGRectMake(0,460,0,0)];
pv.userInteractionEnabled = YES;
[self.view addSubview:pv];
textField.placeholder = @"currently selecting below";
[self scrollTheView:YES];
return NO;
}
return YES;
}
我的scrollTheView方法执行如下:
- (void)scrollTheView:(BOOL) moveUp {
int scrollAmount = 212;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
CGRect rect = self.view.frame;
if(moveUp){
rect.origin.y -= scrollAmount;
}
else {
rect.origin.y += scrollAmount;
}
self.view.frame = rect;
[UIView commitAnimations];
}
我的问题是虽然显示器看起来很完美,但是datepicker控件根本不会接受我的输入。它只是停留在当前日期。我不确定我在这里缺少什么,可能是简单的。
答案 0 :(得分:2)
通过修改上面的代码来执行以下操作,将子视图添加为superview的子视图:
UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0, 480, 320, 216)];
UIDatePicker *pv = [[UIDatePicker alloc] initWithFrame:CGRectMake(0,0,320,216)];
[myView addSubview:pv];
[self.view.superview addSubview:myView];
并修改我的滚动方法以另外滚动此新视图:
UIView *sv = self.view.superview;
UIView *subv = [[sv subviews] objectAtIndex:1];
CGRect rect2 = subv.frame;
if(moveUp){
rect2.origin.y -= scrollAmount;
}
else {
rect2.origin.y += scrollAmount;
}
subv.frame = rect2;
我能够实现目标。感谢Ben的帮助。
答案 1 :(得分:1)
从您所描述的内容来看,您将UIDatePicker放在另一个视图中,但超出了它的范围。如果未检查IB中的“剪辑子视图”,那么您仍然可以查看您的选择器,但由于它不在边界区域,因此它不会被触摸。