becomeFirstResponder 重置其他视图的 x/y 位置
Posted
技术标签:
【中文标题】becomeFirstResponder 重置其他视图的 x/y 位置【英文标题】:becomeFirstResponder resets x/y position of other views 【发布时间】:2015-03-02 21:18:38 【问题描述】:我在两个 UITextFields 上做一些动画。当一个文本字段完成编辑后,我使用UIView.animateWithDuration
为左侧的第一个文本字段设置动画,并再次调用UIView.animateWithDuration
以显示第二个文本字段进行编辑。
问题是,当我在第二个文本字段上调用 becomeFirstResponder()
时,它会还原第一个 ui 文本字段上的新 x/y 坐标。
怎么了?
编辑
提供的代码
func animateMe()
UIView.animateWithDuration(0.5, delay: 0, options: .CurveEaseOut, animations:
self.onText.frame.offset(dx: self.onText.frame.size.width / -4 * 3 - 10, dy: 0)
, completion: finished in
println("one shown!")
self.oneText.frame.offset(dx: self.onText.frame.size.width / -4 * 3 - 10, dy: 0)
self.twoText.becomeFirstResponder() //undoes the whole animation
)
【问题讨论】:
【参考方案1】:在 UIView 动画方法的完成块中,将你的 UITextfield 的框架设置为目标新位置。 动画不会为你做这件事,这是违反直觉的,但解释太长了。
【讨论】:
不确定我是否按照你说的那样做......你会看到我的编辑吗?【参考方案2】:如果您使用约束来创建原始位置,则可能会在弹出键盘时刷新布局,这会将您的文本框恢复到约束所说的位置。
如果是这种情况,您可能需要在 layoutSubviews 中设置文本字段最终帧。这样,您将继续覆盖默认布局。仅在应该折叠时才这样做,以便在应该折叠时弹回。
【讨论】:
我已经删除了文本字段中的所有约束,并且实际上禁用了键盘(模拟器),问题仍然存在 如果你在任何地方有任何约束,Xcode 会在幕后添加自动约束。我会添加 layoutSubviews 并只调用 super 但放置一个断点,以便您可以检测它是否被调用。 becomeFirstResponder 向文本字段询问输入视图和辅助视图,然后很可能会进行布局,无论您是否在模拟器中显示键盘。以上是关于becomeFirstResponder 重置其他视图的 x/y 位置的主要内容,如果未能解决你的问题,请参考以下文章
应该总是在主线程上调用 becomeFirstResponder() 吗?
在 UITableViewController textfield.becomeFirstResponder() 中不滚动 tableview
becomeFirstResponder 在 iOS 8 中不起作用
在UITableViewController中textfield.becomeFirstResponder()不滚动tableview