菜鸟教程小白 发表于 2022-12-13 10:54:05

iOS 键盘显示事件处理


                                            <p><p>我正在开发一个聊天应用程序,其中我有一个 TextView (不是文本字段),当我点击它时,键盘应该显示并且所有内容都应该向上移动。</p>

<p>到目前为止,我已经设法将表格 View 和 TextView 的框架向上移动并使用以下代码显示键盘。</p>

<pre><code>- (void)keyboardWasShown:(NSNotification *)notification {

    NSDictionary* info = ;

    keyboardSize = [ CGRectValue].size;

    CGPoint contentViewOrigin = self.contentView.frame.origin;

    CGFloat contentViewHeight = self.contentView.frame.size.height;

    CGRect visibleRect = self.view.frame;

    visibleRect.size.height -= keyboardSize.height;
    BOOL up = CGRectContainsPoint(visibleRect, contentViewOrigin);

    if (!up){


    self.tableView.frame = CGRectMake(self.tableView.frame.origin.x,self.tableView.frame.origin.y,self.tableView.frame.size.width,280.0f);


    self.contentView.frame = CGRectOffset(self.contentView.frame, 0, 0 - keyboardSize.height);

    if(!=0)
    {
      NSIndexPath* ip = -1 inSection:0];
      ;
    }


}

}

- (void)keyboardWillBeHidden:(NSNotification *)notification {

self.contentView.frame = originalContentView;
self.tableView.frame = originalTable;
}


- (void)registerForKeyboardNotifications {

[ addObserver:self
                                       selector:@selector(keyboardWasShown:)
                                             name:UIKeyboardDidShowNotification
                                           object:nil];

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

}

- (void)deregisterFromKeyboardNotifications {

[ removeObserver:self
                                                name:UIKeyboardDidHideNotification
                                              object:nil];

[ removeObserver:self
                                                name:UIKeyboardWillHideNotification
                                              object:nil];

}
</code></pre>

<p>但是当我看到 whatsapp 是如何做到的时,我的看起来就像一个黑客。 Whatsapp 的键盘与所有元素一起向上移动,而我的工作方式如下:首先显示键盘,向应用发送通知,收到通知,代码计算键盘高度并根据高度向上移动元素。 </p>

<p>我已经搜索并找到了我实现的解决方案。 </p>

<p>有人可以帮忙吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我在我的应用程序中经常使用这个技巧。你想听 <code>UIKeyboardWillShowNotification</code> 和 <code>UIKeyboardWillHideNotification</code>。
在我看来,处理动画的最佳方式是使用自动布局。当你调用 ;您的 View 将与键盘动画一起移动。不需要动画 block 。 </p>

<p>我设置了一个简单的 <a href="https://github.com/NKorotkov/KeyboardNotificationsFun" rel="noreferrer noopener nofollow">project</a>任何人都可以尝试看看它是如何工作的!</p>

<pre><code>- (void)addKeyboardNotificationsObserver {

    [ addObserver:self
                                             selector:@selector(handleKeyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
    [ addObserver:self
                                             selector:@selector(handleKeyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

}

- (void)handleKeyboardWillShow:(NSNotification *)paramNotification

{

    NSDictionary* info = ;

    //when switching languages keyboard might change its height (emoji keyboard is higher than most keyboards).
    //You can get both sizes of the previous keyboard and the new one from info dictionary.

    // size of the keyb that is about to disappear
    CGSize kbSize = [ CGRectValue].size;

    // size of the keyb that is about to appear
    CGSize kbSizeNew = [ CGRectValue].size;

    //make adjustments to constraints here...

    //and here where&#39;s magick happen!

    ;

}

- (void)handleKeyboardWillHide:(NSNotification *)paramNotification

{
    //adjust constraints

    ;

}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于iOS 键盘显示事件处理,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/30664160/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/30664160/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iOS 键盘显示事件处理