0

アプリケーションでスクロール ビューを使用しています。dob テキスト フィールドをクリックすると、datepicker ビューがポップアップとして表示されます。さらに、連続テキスト フィールドをクリックすると、ビューは画像のようになります。ここに私のコード、

日付ピッカーの可視性のため。

UIButton が押された後の UIDatePicker ポップアップ

キーボードの向きについて

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
[dob resignFirstResponder];
if (txt1.textColor == [UIColor lightGrayColor]) {
    txt1.text = @"";
    txt1.textColor = [UIColor blackColor];
}
if ([textField isEqual:dob])
{
    [self but];
    [dob resignFirstResponder];
    //return NO;
}  
//[self animateTextField:textField up:YES];
[textField setClearButtonMode:UITextFieldViewModeWhileEditing];
CGRect textFieldRect  = [self.view.window convertRect:textField.bounds fromView:textField];
CGRect viewRect = [self.view.window convertRect:self.view.bounds fromView:self.view];
CGFloat midline = textFieldRect.origin.y + 0.1 * textFieldRect.size.height;
CGFloat numerator = midline - viewRect.origin.y - MINIMUM_SCROLL_FRACTION * viewRect.size.height;
CGFloat denominator =   (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION) * viewRect.size.height;
CGFloat heightFraction = numerator / denominator;
if (heightFraction < 0.0)
{
    heightFraction = 0.0;
}
else if (heightFraction > 1.0)
{
    heightFraction = 1.0;
}
UIInterfaceOrientation orientation =
[[UIApplication sharedApplication] statusBarOrientation];
if (orientation == UIInterfaceOrientationPortrait ||
    orientation == UIInterfaceOrientationPortraitUpsideDown)
{
    animatedDistance = floor(PORTRAIT_KEYBOARD_HEIGHT * heightFraction);
}
else
{
    animatedDistance = floor(LANDSCAPE_KEYBOARD_HEIGHT * heightFraction);
}
CGRect viewFrame = self.view.frame;
viewFrame.origin.y -= animatedDistance;

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];

[self.view setFrame:viewFrame];

[UIView commitAnimations];    
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{

//[self animateTextField:textField up:NO];
CGRect viewFrame = self.view.frame;
viewFrame.origin.y += animatedDistance;

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];

[self.view setFrame:viewFrame];

[UIView commitAnimations];    
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
return [textField resignFirstResponder];
return [txt1 resignFirstResponder];
}

誰でも私がクリアするのを手伝ってくれますか。 ここに画像の説明を入力

4

3 に答える 3

0

私は問題を理解していると思います。

たとえば、あなたの登録ページには、多くのテキストフィールドとDOBのボタンがあります。

したがって、基本的にテキストフィールドの編集後、キーボードを返す代わりに、ユーザーは DOB のボタンを押します。

そのため、最初にすべてのテキストフィールドで FirstRespoder を再署名する必要があります。

問題は、startEditing フレームを上に設定し、endEditing を下に設定すると、ボタンをクリックすると endEditing が呼び出されないため、フレームが下に設定されないことです。そして再び u startEditing フレームを再び上に設定するので、問題が発生します。

これが助けになることを願っています...

于 2013-11-12T11:27:00.027 に答える
0

キーボードが表示されたら、スクロールビューのサイズを変更する必要があります。

これは、次を追加することで実行できます。

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    [center addObserver:self selector:@selector(keyboardShown) name:UIKeyboardDidShowNotification object:nil];
    [center addObserver:self selector:@selector(keyboardHidden) name:UIKeyboardWillHideNotification object:nil];

ビューでDidLoad。次に、実装ファイルでメソッド keyboardShown および keyboardHidden を定義します。これらのメソッドは、キーボードが表示されたり消えたりするときに自動的に呼び出されます。これらのメソッドでは、それに応じて背景ビューのサイズを変更します。スクロール ビューを使用しているため、scrollView の contectView サイズにも注意してください。ビューのフレーム サイズとは異なるためです。

于 2012-09-21T05:05:56.353 に答える
0

スクロール ビューがあり、キーボードが表示されたときにそのコンテンツを移動する必要があるという基本的な問題については、Michael Tyson によるこのオープン ソースのスクロール ビュー クラスが非常に役立つことがわかりました。

基本的に、TPKeyboardAvoidingScrollViewクラスをプロジェクトに追加し、通常UIScrollView. に追加する子ビューは、必要に応じてオブジェクトにするTPKeyboardAvoidingScrollViewことができます。UITextFieldこれらのフィールドをタップして編集を開始すると、キーボードが表示され、TPKeyboardAvoidingScrollViewコンテナは適切なスクロール位置を選択して、編集中のフィールドがキーボードによって隠されないようにし、画面にあるような黒いバーが表示されないようにしますショット。

于 2012-09-21T06:17:30.453 に答える