【问题标题】:How to resize view according to keyboard show/hide if keyboard is already shown如果键盘已显示,如何根据键盘显示/隐藏调整视图大小
【发布时间】:2012-04-20 13:15:21
【问题描述】:

在视图 A 中,我有一个文本字段。我点击一个控件来推入一个新的视图控制器 B。视图 B 只有一个文本视图,它的框架应该调整以适应键盘,我总是将文本视图设置为第一响应者,并且键盘应该在视图时立即显示B被推了进去。

我在视图控制器 B 中进行通常的键盘通知处理。因此,如果在推送视图 B 之前未显示键盘,则没有问题。但是,如果视图 A 中的文本字段是第一响应者并且当我推入视图控制器 B 时键盘已经显示,我将不会收到 UIKeyboardWillShowNotification/UIKeyboardDidShowNotification。有什么建议来处理这种情况吗?

【问题讨论】:

  • 它是 Ipad 应用程序吗?它是视图 A PageSheet 样式吗?
  • 你为什么不试试 UITextfieldDelegate 或 UITextViewDelegate 可能对你有帮助。

标签: ios keyboard


【解决方案1】:

我以前没有遇到过这个问题,但我有一个建议。也许在视图 B 中,你可以让你的 textView resignFirstResponder 然后 becomeFirstResponder 强制键盘通知出来。示例如下:

[textView resignFirstResponder];
[textView becomeFirstResponder];

还有另外一种绕行的方式,也许你可以在推送前在视图A中resignFirstResponder,然后在视图B之后becomeFirstResponder是viewDidAppear。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    您可以将键盘状态信息传递给 viewController B ...这不是一个好方法,但是我尝试了其他一些方法,例如在 viewController A 的 viewWillDisappear 中调用 [textView resignFirstResponder] ,它们都不起作用.

    【讨论】:

      【解决方案3】:

      辞去第一响应者然后再次成为第一响应者并不是一个好的解决方案,我第一次想到它时就立即放弃了。当键盘已经存在时,强制键盘隐藏并立即再次显示是不正确的做法——这是一种浪费,会破坏平滑过渡。

      通过破坏 B 的封装将键盘状态从视图 A 发送到视图 B 在软件工程中是不可接受的。

      所以我认为它值得一个错误报告,我做了一个 - #11205521。

      【讨论】:

        【解决方案4】:

        你应该试试UITouch。

        - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
        {
          // Detect touch anywhere
          UITouch *touch = [touches anyObject];
        
          // Get the point that was touched
          CGPoint point = [touch locationInView:self.view];
          NSLog(@"pointx: %f pointy:%f", point.x, point.y);
        
          // Check if the point touched is within these rectangular bounds
          if (CGRectContainsPoint(CGRectMake(5, 5, 40, 130), point))
          {
            //do something...
          } 
        }
        

        【讨论】:

          【解决方案5】:

          您好,根据我使用类似这样的键盘调整视图大小

          - (void) animateView: (BOOL) up
          {
              CGRect rect = self.view.frame;
          
              if(up)
              {
                  float movement = (up ? 264 : 416);
                  rect.size.height = movement;
                  self.view.frame = rect;
              }
              else
              {
                  rect.size.height = 480;
                  self.view.frame = rect;
              }
          }
          

          BOOL 变量 up 用于指示是否显示键盘

          希望这会有所帮助!

          问候, 豪尔赫

          【讨论】:

            【解决方案6】:

            您可以在应用的某个中心位置(例如 appDelegate)监控键盘状态,并让所有组件从中获取当前键盘信息。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-03-08
              • 2019-07-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多