2015-02-05 4 views
0

Я пытаюсь отобразить UIDatePicker без UITextField. Я понимаю, что могу установить свойство UITextField inputView, но я не хочу этого делать.Правильное отображение UIDatePicker без UITextField

У меня есть UITableViewCell с стилем Right Detail, и я хотел бы показать UIDatePicker, когда строка выбрана. Когда значение UIDatePicker меняет значение, я обновляю ярлык детали в ячейке.

Проблема в том, что я не могу найти способ отображения UIDatePicker без UITextField. Если я просто создаю UIDatePicker и добавлю его в мой вид, он отображается неправильно, потому что он не имеет фонового/контейнерного вида (если не задан цвет фона), и я должен установить позицию вручную.

Кроме того, view свойства моего стола контроллера представления является UIScrollView и если пользователь прокручивает после добавления выбора даты в представление, то выбор даты двигается относительно точки зрения прокрутки. Чтобы противостоять этому, я сейчас добавляю его в UIWindow.

Есть ли лучший способ сделать это или сделать это вручную?

  1. Создание UIDatePicker
  2. Установите цвет фона
  3. Вычислить позицию
  4. Добавить его в окно (чтобы избежать UIScrollView, затрагивающего его)

Спасибо.

ответ

0

Вот один из способов, который сработал для меня. Я использую свой пример ниже:

Не нужно делать никаких осложнений для отображения выбора даты. Я просто перетащил его на стол, перетащил его, чтобы установить IBOutlet (datePicker) и IBAction (pickDate). В viewDidLoad я установил datePicker.hidden = true (так что сборщик скрыт изначально). В didSelectRowAtIndexPath я сохранил indexPath в глобальной переменной savedIndexPath, тогда я установил datePicker.hidden = false (в котором отобразится сборщик данных поверх таблицыView). В 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 
    } 


} 
Смежные вопросы