我想从UIDatePicker获取日期并将其添加到UITableView单元格。
我尝试将标签放入表格视图单元格,并在每次使用该应用程序的用户点击添加日期时进行更新。但是,这是不合逻辑的方式,并且Xcode不允许我通过给我错误来做到这一点。
因此我在tableview外面放了一个标签来测试,每当我点击Add Date按钮时,就会显示日期。
以下是我在视图控制器文件夹中的代码
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var examDatePicker: UIDatePicker!
@IBOutlet weak var AddClassButton: UIButton!
@IBOutlet weak var dateLabel: UILabel!
@IBOutlet weak var datesTable: UITableViewCell!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
AddClassButton.addTarget(self, action: #selector(pressButton(button:)), for: .touchUpInside)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func pressButton(button: UIButton) {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd MMM yyyy"
let selectedDate = dateFormatter.string(from: examDatePicker.date)
dateLabel.text = selectedDate
// datesTable
//myDatePicker.datePickerMode = UIDatePickerMode.Date
}
}
答案 0 :(得分:1)
您需要实现表视图的数据源方法,并且在从datepicker中选择日期之后,您需要重新加载tableview并将所选日期分配给单元格的标签
class ViewController: UIViewController {
var selectedDate : String ? //Make global variable
func pressButton(button: UIButton) {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd MMM yyyy"
selectedDate = dateFormatter.string(from: examDatePicker.date)
self.IBtableView.reload()
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
return 1 //anything you want
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as? YourCustomCell // Or UITableViewCell
cell. dateLabel.text = selectedDate ?? "SelectDateFromDatePicker"
}
}
答案 1 :(得分:1)
这个答案与Sunil Prajapati提供的答案略有不同,证明使用数组来保持琴弦,我认为这是一个更标准的模式。
import UIKit
class ViewController: UIViewController {
// MARK: - Outlets
@IBOutlet weak var table: UITableView!
@IBOutlet weak var datePicker: UIDatePicker!
// MARK: - Properties
var tableSource = [String]()
// MARK: - Actions
@IBAction func pickDateButtonTouched(_ sender: Any) {
// a bit contrived, but you get the idea
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .none
// get the date
let dateString = formatter.string(from: datePicker.date)
// put the string in the data source for the table
tableSource.insert(dateString, at: 0)
table.reloadData()
// profit?
}
// MARK: - Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
table.dataSource = self
}
}
extension ViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tableSource.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .default, reuseIdentifier: nil)
cell.textLabel?.text = tableSource[indexPath.row]
return cell
}
}