Objective c 如何在Objective C中从标准键盘后面以动画方式隐藏/显示可选键盘

Objective c 如何在Objective C中从标准键盘后面以动画方式隐藏/显示可选键盘,objective-c,keyboard,show-hide,optional,Objective C,Keyboard,Show Hide,Optional,我已经设置了一个inputAccessoryView作为XIB文件视图的引用出口,该视图有一个可选键盘的按钮。这使得视图在显示标准键盘时显示,在隐藏标准键盘时隐藏 当可选键盘在中间区域被点击时,还需要隐藏它。这使得它在标准键盘仍显示时被隐藏。为此,我还将另一个属性设置为引用同一个XIB文件视图的出口 我正在隐藏可选键盘,将其帧的原点.y设置为一个高数字: [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration

我已经设置了一个inputAccessoryView作为XIB文件视图的引用出口,该视图有一个可选键盘的按钮。这使得视图在显示标准键盘时显示,在隐藏标准键盘时隐藏

当可选键盘在中间区域被点击时,还需要隐藏它。这使得它在标准键盘仍显示时被隐藏。为此,我还将另一个属性设置为引用同一个XIB文件视图的出口

我正在隐藏可选键盘,将其帧的原点.y设置为一个高数字:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.30f];
viewOptionalKeyboard.frame = CGRectMake(viewOptionalKeyboard.frame.origin.x, 1200, viewOptionalKeyboard.frame.size.width, viewOptionalKeyboard.frame.size.height);
[UIView commitAnimations];
[UIView setAnimationDuration:0];
这使得可选键盘被隐藏,但动画位于标准键盘之上,而不是后面。你可以看到辅助键盘从上到下遍布整个窗口,直到它被隐藏

有没有办法把它隐藏在标准键盘后面,这样它的隐藏过程看起来会更好

我编辑了这个问题,因为现在隐藏效果很好,Chris的回答建议更改视图的大小

现在的问题是再次显示它:当我点击一个按钮时,视图应该以相同的大小再次显示。在按钮点击事件中,我添加了以下代码:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.30f];
viewOptionalKeyboard.frame = CGRectMake(viewOptionalKeyboard.frame.origin.x, 500, viewOptionalKeyboard.frame.size.width, 74);
[UIView commitAnimations];
[UIView setAnimationDuration:0];
这是为了将可选键盘设置为其原始大小和原始y位置。它得到了它原来的位置,但有两件事使它出错:

1) 它显示在标准键盘的上方,所以我们回到隐藏问题,但现在显示时。同样,您可以看到可选键盘从下到下遍布整个窗口,直到它到达其原始位置

2) 属于包含可选键盘的主视图的按钮大小很短,就像被压碎了一样


再次显示键盘以避免此问题的最佳方法是什么?

为什么不在移动y点的同时降低视图的高度

//For ease of reading    
CGRect frame = viewOptionalKeyboard.frame;

float x = frame.origin.x;
float y = frame.origin.y + frame.size.height;

viewOptionalKeyboard.frame = CGRectMake(x, y, frame.size.width, 0);
您只需确保子视图具有灵活的高度自动调整遮罩

编辑:现在问题已更改为需要隐藏/显示视图,答案也已更改

您需要ivar或属性来跟踪原始帧高度:

@property (nonatomic, assign) float originalHeight;
然后,在显示/隐藏方法中,您可以检查viewOptionalKeyboard框架是否可见,并相应地执行以下操作:

CGRect frame = viewOptionalKeyboard.frame;

BOOL isVisible = frame.size.height!=0;

//Only need to set once
if (!originalHeight && isVisible){
    self.originalHeight = frame.size.height;
}

frame.origin.y += (isVisible) ? originalHeight : -originalHeight;
frame.size.height = (isVisible) ? 0 : originalHeight;

viewOptionalKeyboardFrame.frame = frame;

克里斯,我不得不编辑我的问题和标题,因为隐藏效果很好,但表演不好。不知道你的意思?如果您需要重新显示相同的视图,您可以反向执行相同的动画,即将y设置为原始y,将高度设置为原始高度,您可以查看问题版本,通过隐藏可选键盘,仅将其设置为离应重新出现的位置较近的距离,就可以获得已解决第一个问题的理想答案。现在唯一的问题是,我试图将可选键盘的按钮设置为其原始大小,但由于某种原因,高度没有改变。当可选键盘返回时,它们会被压碎。最后一次编辑可能不是必需的,因为同样的事情在另一种方式下(假设原始大小.y是一个常数,在本例中为74)在我自己的问题示例中完成。我还解决了按钮的问题,我在调整大小时犯了一个愚蠢的错误,但你所要做的就是调整它们的大小。