0

私はiPhoneアプリを書いていますが、キーボードが表示されたときにカバーされるUITextfieldがいくつかあります。したがって、UITextFieldsをに入れ、UIScrollViewキーボードがアクティブになったときにこのメソッドが呼び出されるように、自分自身をデリゲートとして設定します。

-(void) textFieldDidBeginEditing:(UITextField *)textField
{
    self.myScrollView.contentSize = CGSizeMake(self.myScrollView.contentSize.width, 560);
    [self.myScrollView setContentOffset:CGPointMake(0, 200) animated:YES];
}

textSizeを高くして、テキストフィールドにフォーカスを合わせた後でも、ユーザーがスクロールできるようにしていることに注意してください。

同様に、テキストフィールドがファーストレスポンダーステータスを辞任すると、このメソッドが呼び出されます。

-(void) textFieldDidEndEditing:(UITextField *)textField
{
    [self.myScrollView setContentOffset:CGPointMake(0, 0) animated:YES];
    self.myScrollView.contentSize = CGSizeMake(self.myScrollView.contentSize.width,self.myScrollView.frame.size.height);    
}

キーボードを下げると、すべてのコンテンツが表示されるため、スクロールを有効にする必要がないことに注意してください(contentSize = frame.size)。

ただし、私の問題は、contentOffsetが設定された直後にcontentSizeを設定しているため、setContentOffsetアニメーションを完了する時間がないことです。代わりに、アニメーションは非常にぎくしゃくしているように見えます。助言がありますか?

4

3 に答える 3

2

UIKeyboardDidShowNotification と UIKeyboardWillHideNotification を使用することをお勧めします。

ステップ 1: 2 つの通知を聞く

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardDidShow:)
                                             name:UIKeyboardDidShowNotification object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillBeHidden:)
                                             name:UIKeyboardWillHideNotification object:nil];

ステップ 2: キーボードが表示されている間に何かをする

- (void)keyboardDidShow:(NSNotification*)notification
{
CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;

BOOL Need_Resize; // judge by yourself

if (Need_Resize) {
    double offset; // judge by yourself
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [self.view setCenter:CGPointMake(self.view.center.x, self.view.center.y - offset];
    [UIView commitAnimations];
}

}

ステップ 3: キーボードが隠れている間に何かをする

// in animation code, set the view back to the original place
[self.view setCenter:CGPointMake(self.view.center.x, self.view.frame.size.height/2)];

このソリューションは UIScrollView を必要とせず、アニメーションでビューの場所を調整するだけで十分に見栄えがします。

于 2013-02-20T03:45:19.203 に答える
0

コンテンツオフセットを設定する代わりに、scrollRectToVisible:animated:を使用して、テキストフィールドの四角形を渡すか、CGRectZero進行方向に応じて渡すことができます。

于 2013-02-20T03:52:23.273 に答える
0

これはどうですか?それが機能するかどうかはわかりませんが、頭のてっぺんから:

[UIView animateWithDuration:0.5
                  animations:^{
                      self.myScrollView.contentSize = CGSizeMake(self.myScrollView.contentSize.width, 560);
                  } completion:^(BOOL finished) {
                      [self.myScrollView setContentOffset:CGPointMake(0, 200) animated:YES];
                  }];

幸運を

于 2013-02-20T03:44:31.300 に答える