我有一个基于视图的应用程序,它有一些文本框,我正在尝试用一些选取器填充这些文本框。例如,其中一个将用于日期选择。我使用以下代码将一个新视图添加到当前视图的底部,然后向上滚动整个视图:
- (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控件根本不接受我的输入。它只是停留在当前日期。我不确定我错过了什么,可能是一些简单的东西。
发布于 2010-01-30 00:05:08
通过修改上面的代码来执行以下操作,以将子视图添加为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];  并修改我的scroll方法以另外滚动这个新视图:
    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的帮助。
发布于 2010-01-29 12:25:10
根据您所描述的,您将UIDatePicker放在另一个视图中,但超出了它的范围。如果IB中的"Clips subviews“没有被选中,那么你仍然可以看到你的选择器,但是因为它不在边界区域,所以它是不可触摸的。
https://stackoverflow.com/questions/2159821
复制相似问题