0

問題が発生しました:

私はこのようなビューコントローラーを持っています。 ここに画像の説明を入力してください

キーボードが表示されたときにツールバーを上にするには、self.viewを上に移動します。

[self.view setFrame:CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y + keyboardFrame.size.height * (up ? -1 : 1), self.view.frame.size.width, self.view.frame.size.height)];

次に、ツールバーの左ボタンをクリックして、フレームがこのキーボードと同じであるというビューを表示します。

しかし、このビューをどこに追加できますか?サブビューをself.viewに追加すると、カバーではなく、キーボードの上部にあるself.viewとともに上に移動します。私はIOSの初心者で、それについてはわかりません。検索しましたが、これについては何もわかりません。

別の質問ですが、下部のツールバーで左ボタンをクリックしてビューを表示したい場合(アニメーションとフレームはどちらもキーボードと同じです)、どうすればよいですか?

手伝って頂けますか?ありがとう

4

2 に答える 2

1

キーボードで上下に取り付けられたキーボードの上にあるバーをポップしたいというのは正しいですか?

次に、キーボードの表示と非表示の通知に登録し、通知とキーボードの表示と非表示の速度に基づいてビューを上下にアニメーション化する必要があります。

[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(keyboardWillShow:) 
                                             name:UIKeyboardWillShowNotification 
                                           object:nil];

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

ここで、すべてのセレクター メソッドを実装する必要があります。

//Code from Brett Schumann
-(void) keyboardWillShow:(NSNotification *)note{
    // get keyboard size and loctaion
    CGRect keyboardBounds;
    [[note.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue: &keyboardBounds];
    NSNumber *duration = [note.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];
    NSNumber *curve = [note.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey];

    // Need to translate the bounds to account for rotation.
    keyboardBounds = [self.view convertRect:keyboardBounds toView:nil];

    // get a rect for the textView frame
    CGRect containerFrame = containerView.frame;
    containerFrame.origin.y = self.view.bounds.size.height - (keyboardBounds.size.height + containerFrame.size.height);
    // animations settings
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:[duration doubleValue]];
    [UIView setAnimationCurve:[curve intValue]];

    // set views with new info
    containerView.frame = containerFrame;

    // commit animations
    [UIView commitAnimations];

    [self showSendButton];
}

-(void) keyboardWillHide:(NSNotification *)note{
    NSNumber *duration = [note.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];
    NSNumber *curve = [note.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey];

    // get a rect for the textView frame
    CGRect containerFrame = containerView.frame;
    containerFrame.origin.y = self.view.bounds.size.height - containerFrame.size.height;

    // animations settings
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:[duration doubleValue]];
    [UIView setAnimationCurve:[curve intValue]];

    // set views with new info
    containerView.frame = containerFrame;

    // commit animations
    [UIView commitAnimations];

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0, 0, containerView.frame.size.height-46.0f+20.0f, 0);
    _table.contentInset = contentInsets;
    _table.scrollIndicatorInsets = contentInsets;

    //display button based on facebook login status
    if ([facebookService.facebook isSessionValid]) {
        [commentButton makeButtonLogoutButton];
        textView.editable = YES;
    } else {
        [commentButton makeButtonLoginButton];
        textView.editable = NO;
    }
}

- (void)keyboardWasShown:(NSNotification*)aNotification
{
    NSDictionary* info = [aNotification userInfo];
    kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height+20.0f, 0.0);
    _table.contentInset = contentInsets;
    _table.scrollIndicatorInsets = contentInsets;
}

キーボード上の指定されたビューを独自のビューに置き換えてください。このビューは、すべてのボタンなどを含む単一のビューである必要があります。

ご挨拶

于 2012-08-30T16:02:11.710 に答える
0

まず第一に、なぜあなたはキーボードをカバーしたいのですか?そうするのはあまり良い考えではないようです。そして、私はそれがまったく可能でさえないと思います。UIView2番目の質問への回答については、ドキュメントを参照してください。

[UIView animateWithDuration:0.3 animations:^{
    // place your view wherever you want
    CGRect frame = myView.frame;
    frame.y = self.view.frame.size.height - frame.size.height;
    myView.frame = frame;
}];
于 2012-08-30T15:50:39.337 に答える