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