【发布时间】:2015-01-14 17:39:54
【问题描述】:
UITextField 有一个inputView 属性,可用于指定自定义键盘。将此清除为 nil 会提供默认键盘。
如果UITextField 是第一响应者,则设置inputView 不会发生任何变化,但通过调用[textField reloadInputView],键盘会立即发生变化。
我希望能够在两种不同的输入方式之间切换。触发此操作的接口将是安装为UITextField 的inputAccessoryView 的UISegmentedView。
我已经完成了这项工作,但过渡非常突然。部分原因是我在 iPad 上转换的微调器和键盘的尺寸不同。
我发现我在reloadInputView 周围包裹了一个动画块,我将在两个键盘的视图帧之间获得平滑的动画。不幸的是,由于过渡没有动画效果,因此存在视觉抖动:
[UIView animateWithDuration: 0.3 animations:^()
{
[firstResponder reloadInputViews];
}];
或者,如果我将重新加载包装在一个过渡中,我可以获得一个很好的交叉淡入淡出,但我没有得到平滑的帧变化:
[UIView transitionWithView: keyboardWindow
duration: 0.3
options: UIViewAnimationOptionTransitionCrossDissolve
animations: ^(){ [firstResponder reloadInputViews]; }
completion: nil];
(在第二个代码块中,我从self.window 获得了keyboardWindow,因为这个视图是作为UITextField 的inputAccessoryView 安装的,它最终嵌套在键盘窗口下。)
我想要动画和转换输入视图重新加载。我尝试将重新加载放置在动画的过渡中,我还尝试将重新加载放置在过渡中的动画中 - 似乎都没有帮助。
有什么想法吗?谢谢!
【问题讨论】:
标签: ios uitextfield uiviewanimation uiviewanimationtransition