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

时间:2012-10-18 16:52:22

标签: objective-c keyboard show-hide optional

我已将inputAccessoryView设置为XIB文件View的Referencing Outlet,其中包含可选键盘的按钮。这样可以在显示标准键盘时显示视图,并在隐藏标准键盘时隐藏。

当可选键盘在其中间区域中轻敲时,还需要隐藏它。这使得它在标准键盘仍然显示时被隐藏。为此,我还将另一个属性设置为相同XIB文件View的引用插座。

我正在隐藏可选键盘,将其框架的origin.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的回答建议改变View的大小。

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

[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)属于包含可选键盘的主视图的按钮尺寸很短,就好像它们已被压碎一样。

再次出现键盘的最佳方法是避免这个问题吗?

1 个答案:

答案 0 :(得分:1)

为什么不在移动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;