Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如果已显示键盘,如何根据键盘显示/隐藏调整视图大小_Ios_Keyboard - Fatal编程技术网

Ios 如果已显示键盘,如何根据键盘显示/隐藏调整视图大小

Ios 如果已显示键盘,如何根据键盘显示/隐藏调整视图大小,ios,keyboard,Ios,Keyboard,在视图A中,我有一个文本字段。我点击一个控件以推入一个新的视图控制器B。视图B只有一个文本视图,其框架应调整以适应键盘,并且我始终将文本视图设置为第一响应者,当视图B被推入时,键盘应立即显示 我在视图控制器B中执行常规的键盘通知处理。因此,如果在按下视图B之前未显示键盘,则没有问题。但是,如果视图A中的文本字段是第一响应者,并且当我推入视图控制器B时键盘已经显示,我将不会收到UIKeyboardWillShowNotification/UIKeyboardDidShowNotification。

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


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

我以前没有遇到过这个问题,但我有一个建议。也许在视图B中,您可以让您的文本视图
退出FirstResponder
,然后
成为FirstResponder
,以强制发出键盘通知。样本如下:

[textView resignFirstResponder];
[textView becomeFirstResponder];
还有另一种方法,也许你可以在推之前在视图A中退出FirstResponder,然后在视图B出现后成为FirstResponder


希望有帮助。

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

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

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


所以我认为它应该有一个bug报告,我做了一个-。

你应该试试
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...
  } 
}

嗨,要根据键盘调整视图的大小,我使用类似这样的方法

- (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用于指示是否显示键盘

希望这有帮助

问候,,
Jorge

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

是Ipad应用程序吗?它是一种页面视图样式吗?为什么不试试UITextfieldDelegate或UITextViewDelegate,它们可能对您有所帮助。