1

いくつかのピッカーを入力しようとしているいくつかのテキストボックスを持つビューベースのアプリケーションがあります。たとえば、そのうちの 1 つは日付選択用です。次を使用して、現在のビューの下部に新しいビューを追加し、ビュー全体を上にスクロールします。

- (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 コントロールが私の入力をまったく受け付けないことです。現在の日付に固執しているだけです。ここで何が欠けているのかわかりません。おそらく単純なものです。

4

2 に答える 2

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;

目標を達成することができました。助けてくれたベンに感謝します。

于 2010-01-29T16:05:08.043 に答える
1

あなたが説明したことから、 UIDatePicker を別のビューの内側に配置しているように聞こえますが、その境界の外側にあります。IB の [Clips subviews] がチェックされていない場合でも、ピッカーを表示できますが、境界領域にないため、触れることはできません。

于 2010-01-29T04:25:09.693 に答える