我试图在没有 UITextField的情况下显示UIDatePicker 。我知道我可以设置UITextField的inputView
属性,但我不想这样做。
我有UITableViewCell
Right Detail
样式,我想在选择行时显示UIDatePicker
。当UIDatePicker
更改值时,我将更新单元格中的详细信息标签。
问题是,如果没有UIDatePicker
,我找不到显示UITextField
的方法。如果我只是创建一个UIDatePicker
并将其添加到我的视图中,它没有正确显示,因为它没有背景/容器视图(除非我设置背景颜色),我必须手动设置位置。
此外,我的表视图控制器的view
属性是UIScrollView ,如果用户在将日期选择器添加到视图后滚动,则日期选择器相对于滚动视图移动。为了解决这个问题,我目前正在将其添加到UIWindow。
有更好的方法可以做到这一点,还是应该手动完成?
感谢。
答案 0 :(得分:0)
这是一种对我有用的方法。我正在使用下面的例子:
显示日期选择器无需任何复杂功能。我只是将它拖到表格视图上,通过控制拖动它来建立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
}
}