Ke *_* MA 4 accessibility uipickerview uitextfield ios voiceover
我有一个带有 PickerView 的 inputView 的 UITextfield。我想实现当用户双击 UITextfield 时,pickerView 以模态显示,就像默认一样,并且可访问性的焦点从文本字段更改为 pickerView。这就是我现在的做法:
func textFieldDidBeginEditing(textField: UITextField) {
let dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(0.65 * Double(NSEC_PER_SEC)))
dispatch_after(dispatchTime, dispatch_get_main_queue(), {
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, self.quantityPicker)})
}
Run Code Online (Sandbox Code Playgroud)
当用户双击 textField 并在 0.65 秒延迟后发送 UIAccessibilityLayoutChangedNotification 以专注于 pickerView 时,此委托只会被调用。
那么问题是:
我在这里使用了一个延迟来等待pickerView弹出动画完成,但如果我能知道pickerView动画在某处完成并放置会更好
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, self.quantityPicker)
那里。那么是否有任何委托或其他简单的方法可以知道 pickerView 已准备好使用?
您可以使用通知中心事件 UIKeyboardDidShowNotification。在托管 UITextField 的视图控制器中,向 viewWillAppear 方法添加代码:
NSNotificationCenter.defaultCenter().addObserver(self,
selector: #selector(self.keyboardDidShow(_:)),
name: UIKeyboardDidShowNotification,
object: nil)
Run Code Online (Sandbox Code Playgroud)
在 viewWillDisappear 方法中添加:
NSNotificationCenter.defaultCenter().removeObserver(self)
Run Code Online (Sandbox Code Playgroud)
然后添加一个方法keyboardDidShow:
func keyboardDidShow(notification:NSNotification) {
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, self.quantityPicker)
}
Run Code Online (Sandbox Code Playgroud)
当然,如果您的视图控制器中有其他输入字段,则需要向 keyboardDidShow 添加一些条件代码。
测试和工作。谢谢你的问题,我一直在追同样的问题。
| 归档时间: |
|
| 查看次数: |
1932 次 |
| 最近记录: |