【问题标题】:Properly displaying UIDatePicker without UITextField在没有 UITextField 的情况下正确显示 UIDatePicker
【发布时间】:2015-02-05 00:17:20
【问题描述】:

我试图显示一个UIDatePicker 没有一个UITextField。我知道我可以设置 UITextField 的 inputView 属性,但我不想那样做。

我有一个带有Right Detail 样式的UITableViewCell,我想在选择该行时显示一个UIDatePicker。当UIDatePicker的值发生变化时,我会更新单元格中的详细标签。

问题是,我找不到在没有UITextField 的情况下显示UIDatePicker 的方法。如果我只是创建一个 UIDatePicker 并将其添加到我的视图中,它无法正确显示,因为它没有背景/容器视图(除非我设置了背景颜色),我必须设置手动定位。

另外,我的表格视图控制器的view 属性是一个 UIScrollView,如果用户在将日期选择器添加到视图后滚动,那么日期选择器会相对于滚动视图移动。为了解决这个问题,我目前正在将它添加到 UIWindow。

有没有更好的方法来做这件事,还是应该手动做?

  1. 创建 UIDatePicker
  2. 设置背景颜色
  3. 计算位置
  4. 将其添加到窗口中(避免 UIScrollView 影响它)

谢谢。

【问题讨论】:

    标签: ios iphone uitableview swift uidatepicker


    【解决方案1】:

    这是对我有用的一种方法。我在下面使用我的示例:

    无需执行任何复杂操作即可显示日期选择器。我只是将它拖到表格视图上,控制拖拽它以建立一个 IBOutlet (datePicker) 和一个 IBAction (pickDate)。在 viewDidLoad 中,我设置了datePicker.hidden = true(这样选择器最初是隐藏的)。在 didSelectRowAtIndexPath 中,我将 indexPath 保存到全局变量 savedIndexPath 中,然后设置datePicker.hidden = false(在 tableView 顶部显示日期选择器)。在 IBAction pickDate 中,获取选中的单元格并更新单元格的 textLabel。然后隐藏 datePicker。 (我在模拟器上对此进行了测试)。我实现 IBAction 的方式是,只要您抬起手指,它就会更改单元格,然后隐藏选择器。这需要改进。

    它在下面的代码中:

        import UIKit
    
    class TableViewController: UITableViewController {
    
        var myDate = ""
        var savedIndexPath = NSIndexPath()
    
        @IBAction func pickDate(sender: UIDatePicker) {
            myDate = convertDate(sender.date)
            let currentCell = tableView.cellForRowAtIndexPath(savedIndexPath) as UITableViewCell?
            datePicker.hidden = false
            currentCell?.textLabel?.text = myDate
    
            datePicker.hidden = true
        }
    
        @IBOutlet weak var datePicker: UIDatePicker!
    
        override func viewDidLoad() {
            super.viewDidLoad()
            datePicker.hidden = true
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
    
        }
    
        let cellIdentifier = "cell"
        override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            var cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as UITableViewCell!
            if cell == nil
            {
                cell = UITableViewCell( style:.Default, reuseIdentifier:cellIdentifier)
            }
            cell.textLabel?.text = "\(indexPath.row)"
            return cell
        }
    
    
        override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    
            return 1
        }
    
        override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return 3
        }
    
        override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    
            savedIndexPath = indexPath
            datePicker.hidden = false
        }
    
        //MARK: - NSDate Conersion
        func convertDate(date:NSDate) -> String{
            let dateFormatter = NSDateFormatter()
    
            var theDateFormat = NSDateFormatterStyle.ShortStyle
            let theTimeFormat = NSDateFormatterStyle.ShortStyle
    
            dateFormatter.dateStyle = theDateFormat
            dateFormatter.timeStyle = theTimeFormat
            let dateTimeString = dateFormatter.stringFromDate(date)
            return dateTimeString
        }
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-13
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多