2010-01-29 41 views
1

我有一個基於視圖的應用程序,它有一些文本框,我試圖用一些選取器來填充。例如,其中一個將用於日期選擇。我使用下面的一個新視圖添加到我的當前視圖的底部,然後向上滾動整個視圖:如何添加UIDatePicker子視圖與工作用戶交互

- (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控件根本不會接受我的輸入。它只是停留在當前日期。我不確定我在這裏錯過了什麼,可能很簡單。

回答

2

通過修改上面的代碼,以執行以下操作的子視圖添加爲上海華的子視圖:

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

這聽起來來自於你描述的你將UIDatePicker放在另一個視圖內,但超出了它的界限。如果IB中的「剪輯子視圖」沒有被選中,那麼你仍然可以看到你的選擇器,但由於它不在邊界區域,所以它不會被觸摸。

+0

是的,就是這樣。我可以看到它,但不使用它。如果我確實檢查'剪輯子視圖',那麼我甚至不能看到子視圖......所以這裏真正的解決方案是什麼?我的方法完全錯誤嗎? – shawnwall 2010-01-29 04:33:37

+0

這聽起來像你走錯了路。嘗試添加UIDatePicker到你的viewController的視圖屬性。如果這是您在scrollTheView中操作的同一件事,請勿。你不應該調整視圖的邊界。嘗試將東西移動到子視圖中並移動它們。 – 2010-01-29 05:06:28

+0

啊,我的複雜性是,我確實想把整個初始視圖向上移動,這樣當新的日期選擇器從底部向上滾動時,它實質上是向上推動現有視圖。我正在使用[self.view addSubview:picker]添加新的選擇器; self.view.frame的起源是我在上面的方法代碼中一直在向上移動。 – shawnwall 2010-01-29 12:55:36

相關問題