gpt4 book ai didi

swift - 在 tableview swift 中单击按钮时无法更新 datePicker 中的时间

转载 作者:行者123 更新时间:2023-11-28 15:28:57 24 4
gpt4 key购买 nike

我正在尝试显示一个日期选择器并在单击按钮时更新它的时间。

我有一个显示营业时间的表格 View ,如下图 1 所示。

图一

enter image description here

单击计时单元格或单元格内的时间按钮时,我正在展开单元格以显示日期选择器,我无法将日期选择器中的时间更新为时间按钮上的时间。

例如,当单击 9:00 AM 时,我想在日期选择器中显示 9:00 AM,如下图 2 所示,或者当单击 5:00 PM 时,我想在中显示 5:00 PM日期选择器。

此外,当用户更改日期选择器中的时间时,我想更新 tableview 单元格中相应的时间按钮。

图2

enter image description here

下面是代码,见注释下方的代码 //Updating the date picker

因为我试图更新闭包内的日期选择器时间,所以它似乎不起作用。有人可以建议我如何解决这个问题吗?

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

tableView.setEditing(true, animated: true) // This displays the delete button infront of the cell
tableView.allowsSelectionDuringEditing = true // Allows the table view cells to be selected during editing mode

if indexPath.section == 0 {

let cell = Bundle.main.loadNibNamed("DailyTimesTableViewCell", owner: self, options: nil)?.first as! DailyTimesTableViewCell

// Configure the cell...
cell.selectionStyle = UITableViewCellSelectionStyle.none; // Ensuring that there is no background for the selected cell
cell.datePicker.datePickerMode = .time // Setting start and time
cell.datePicker.minuteInterval = 5
cell.datePicker.addTarget(self, action: #selector(datePickerChanged), for: .valueChanged)

let startTime = timesArray[indexPath.row]["startTime"]
cell.startTime.setTitle(startTime as! String?, for: .normal)
cell.startTime.setTitleColor(UIColor.black, for: .normal)

let endTime = timesArray[indexPath.row]["endTime"]

cell.endTime.setTitle(endTime as! String?, for: .normal)
cell.endTime.setTitleColor(UIColor.black, for: .normal)

// Closure
cell.startTimeTapped = { (button : UIButton) -> Void in

// Updating the date picker
cell.datePicker.date = self.convertToDateObject(timeString: startTime as! String)
tableView.reloadRows(at: [indexPath], with: UITableViewRowAnimation.automatic)

// Expanding the cell to show date picker
if self.selectedCellIndexPath != nil && self.selectedCellIndexPath == indexPath {
tableView.cellForRow(at: indexPath)?.setEditing(true, animated: true) // This displays the delete button infront of the cell
self.selectedCellIndexPath = nil
} else {
self.selectedCellIndexPath = indexPath
}


}

// Closure
cell.endTimeTapped = { (button) -> Void in
// Updating the date picker
cell.datePicker.date = self.convertToDateObject(timeString: endTime as! String)
tableView.reloadRows(at: [indexPath], with: UITableViewRowAnimation.automatic)

// Expanding the cell to show date picker
if self.selectedCellIndexPath != nil && self.selectedCellIndexPath == indexPath{
tableView.cellForRow(at: indexPath)?.setEditing(true, animated: true)
self.selectedCellIndexPath = nil
}else{
self.selectedCellIndexPath = indexPath
}
}
return cell
}
}

DailyTimesTableViewCell 代码:

import UIKit

class DailyTimesTableViewCell: UITableViewCell, UITableViewDelegate {
typealias buttonTappedBlock = (_ button:UIButton) -> Void
var startTimeTapped : buttonTappedBlock!
var endTimeTapped : buttonTappedBlock!



@IBAction func startTimeClicked(_ sender: subclassedUIButton) {
if startTimeTapped != nil {
startTimeTapped(sender as UIButton)
}
}

@IBAction func endTimeClicked(_ sender: UIButton) {
if endTimeTapped != nil{
endTimeTapped(sender as UIButton)
}
}
}

最佳答案

要为您的 UIDatePicker 设置日期,只需使用这段代码将字符串形式的时间转换为日期

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "HH:mm"
let date = dateFormatter.dateFromString("17:00")//Put textfield.text! here

datePicker.date = date

对于问题的第二部分,由于您可能有多个日期选择器,您需要做的是为所有选择器添加选择更改监听器,然后找出更改了哪个以及单击了哪个标签。最后将标签设置为正确的值。

您可以使用节号找出点击了哪个数据选取器。在您的 cellForRow 中,添加部分作为标记,然后添加监听器

datePicker.tag = indexPath.section
textView.tag = indexPath.section
datePicker.addTarget(self, action: Selector("dataPickerChanged:"), forControlEvents: UIControlEvents.ValueChanged)

然后在监听函数中,找出是哪个data picker改变了值

func datePickerChanged(datePicker:UIDatePicker) {
var dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = NSDateFormatterStyle.ShortStyle
dateFormatter.timeStyle = NSDateFormatterStyle.ShortStyle

if datePicker.tag == 0 {
textView.text = dateFormatter.stringFromDate(datePicker.date)
}
// keep going

}

关于swift - 在 tableview swift 中单击按钮时无法更新 datePicker 中的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44920990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com