UIPicker detect tap on currently selected row

后端 未结 8 1414
礼貌的吻别
礼貌的吻别 2020-12-01 10:11

I have a UIPickerView and The method didSelectRow is not called when tapping on a selected row. I need to handle

8条回答
  •  悲&欢浪女
    2020-12-01 10:44

    Nikolay's Answer with Swift:

    let tap = UITapGestureRecognizer(target: self, action: #selector(OCAccountSettingsViewController.pickerTapped(_:)))
    tap.cancelsTouchesInView = false
    tap.delegate = self
    pickerView.addGestureRecognizer(tap)
    

    important let your viewController confirm the UIGestureRecognizerDelegate otherwise handler won't fire:

    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true}
    

    the last step will be the handler for tap event:

    func pickerTapped(tapRecognizer:UITapGestureRecognizer)
    {
        if (tapRecognizer.state == UIGestureRecognizerState.Ended)
        {
          let rowHeight : CGFloat  = self.pickerView.rowSizeForComponent(0).height
          let selectedRowFrame: CGRect = CGRectInset(self.pickerView.bounds, 0.0, (CGRectGetHeight(self.pickerView.frame) - rowHeight) / 2.0 )
          let userTappedOnSelectedRow = (CGRectContainsPoint(selectedRowFrame, tapRecognizer.locationInView(pickerView)))
          if (userTappedOnSelectedRow)
          {
            let selectedRow = self.pickerView.selectedRowInComponent(0)
            //do whatever you want here
          }
        }
      }
    

提交回复
热议问题