【问题标题】:Hide datePicker when tapping on another cell?点击另一个单元格时隐藏 datePicker?
【发布时间】:2019-11-03 20:45:25
【问题描述】:

我正在按照 Apple 的“使用 Swift 开发应用程序”来玩弄日期选择器。在第 4.9 章,第 700 页。

我想不通的是,当我选择另一个不是两个日期选择器之一的单元格时,如何隐藏我的日期选择器。如果您单击它们,它们会很好地隐藏,但我希望能够通过在我的视图中选择任何其他单元格来隐藏它们。

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    tableView.deselectRow(at: indexPath, animated: true)

    switch (indexPath.section, indexPath.row) {

    case (checkInDatePickerCellIndexPath.section, checkInDatePickerCellIndexPath.row - 1):

        if isCheckInDatePickerShown {
            isCheckInDatePickerShown = false
        } else if isCheckOutDatePickerShown {
            isCheckOutDatePickerShown = false
            isCheckInDatePickerShown = true
        } else {
            isCheckInDatePickerShown = true
        }

        tableView.beginUpdates()
        tableView.endUpdates()

    case (checkOutDatePickerCellIndexPath.section, checkOutDatePickerCellIndexPath.row - 1):

        if isCheckOutDatePickerShown {
            isCheckOutDatePickerShown = false
        } else if isCheckInDatePickerShown {
            isCheckInDatePickerShown = false
            isCheckOutDatePickerShown = true
        } else {
            isCheckOutDatePickerShown = true
        }

            tableView.beginUpdates()
            tableView.endUpdates()

    default:
        break
        }

我对整个事情很陌生,只是想开始思考它。

【问题讨论】:

    标签: ios swift datepicker tableview didselectrowatindexpath


    【解决方案1】:

    您可以在默认情况下强制执行此行为,这意味着如果点击的单元格不是签入或签出,选择器会隐藏。

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    
      tableView.deselectRow(at: indexPath, animated: true)
    
      switch (indexPath.section, indexPath.row) {
    
      case (checkInDatePickerCellIndexPath.section, checkInDatePickerCellIndexPath.row - 1):
    
         if isCheckInDatePickerShown {
             isCheckInDatePickerShown = false
         } else if isCheckOutDatePickerShown {
             isCheckOutDatePickerShown = false
             isCheckInDatePickerShown = true
         } else {
             isCheckInDatePickerShown = true
         }
    
         tableView.beginUpdates()
         tableView.endUpdates()
    
      case (checkOutDatePickerCellIndexPath.section, checkOutDatePickerCellIndexPath.row - 1):
    
         if isCheckOutDatePickerShown {
             isCheckOutDatePickerShown = false
         } else if isCheckInDatePickerShown {
             isCheckInDatePickerShown = false
             isCheckOutDatePickerShown = true
         } else {
             isCheckOutDatePickerShown = true
         }
    
         tableView.beginUpdates()
         tableView.endUpdates()
    
      default:
    
         isCheckOutDatePickerShown = false
         isCheckInDatePickerShown = false
    
         tableView.beginUpdates()
         tableView.endUpdates()
    
         break
     }
    }
    

    【讨论】:

    • 这也是我尝试的第一件事,但似乎不起作用。实际上根本不会改变行为。
    • 您是否考虑过更改 if 的开关?
    猜你喜欢
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 2023-03-22
    相关资源
    最近更新 更多