关于iOS辅助功能。如何将焦点转移到pickerView

时间:2015-12-03 22:12:36

标签: ios uitextfield accessibility uipickerview voiceover

我有一个带有PickerView输入视图的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)})
}

当用户双击textField并在延迟0.65秒后发送UIAccessibilityLayoutChangedNotification以关注pickerView时,只会调用此委托。

然后问题是:

  1. 我在这里使用延迟等待pickerView弹出动画完成,但如果我知道pickerView动画在某处完成并且放了

    会更好

    UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification,self.quantityPicker)

  2. 那里。那么有没有任何委托或其他简单方法知道pickerView可以使用?

    1. 当我双击textField时,它将首先读取textField的内容,直到它被截获为止。无论如何都要禁用它以使其成为:当我单击按钮时,读取accessibilityLabel,trait,hints等,当我双击它时,它什么都不读,只是完成它的工作。

3 个答案:

答案 0 :(得分:4)

您可以使用通知中心事件UIKeyboardDidShowNotification。在托管UITextField的视图控制器中,向viewWillAppear方法添加代码:

NSNotificationCenter.defaultCenter().addObserver(self, 
                       selector: #selector(self.keyboardDidShow(_:)), 
                       name: UIKeyboardDidShowNotification, 
                       object: nil)

在viewWillDisappear方法中添加:

NSNotificationCenter.defaultCenter().removeObserver(self)

然后添加方法keyboardDidShow:

func keyboardDidShow(notification:NSNotification) {
    UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, self.quantityPicker)
}

当然,如果视图控制器中有其他输入字段,则需要向keyboardDidShow添加一些条件代码。

经过测试和工作。谢谢你的问题,我一直在追逐同样的问题。

答案 1 :(得分:0)

如果您将视图作为单独的模态视图控制器的一部分呈现,则可以使用viewDidAppear方法作为您要查找的回调。

-(void)viewDidAppear:(BOOL)animated {
    UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, outletOfViewYouWantFocused);
}

答案 2 :(得分:0)

@Dale在Swift 4中的答案:

viewWillAppear

NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow(notification:)), name: UIResponder.keyboardDidShowNotification, object: nil)

viewWillDisappear

NotificationCenter.default.removeObserver(self)

keyboardDidShow

@objc func keyboardDidShow(notification: Notification) {
    UIAccessibility.post(notification: .layoutChanged, argument: self.quantityPicker)
}