Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何从日期选择器访问值以根据日期选择器值更改按钮标题?_Ios_Swift_Uitableview_Datepicker_Uibutton - Fatal编程技术网

Ios 如何从日期选择器访问值以根据日期选择器值更改按钮标题?

Ios 如何从日期选择器访问值以根据日期选择器值更改按钮标题?,ios,swift,uitableview,datepicker,uibutton,Ios,Swift,Uitableview,Datepicker,Uibutton,我在工作的项目中,我必须根据datepicker值设置按钮标题 我的设计如下 现在我的代码如下所示 这是我在tableviewCell中设置的按钮 let btn_start_time = cell.viewWithTag(2) as! UIButton btn_start_time.addTarget(self, action: #selector(btnStartTimePressed), forControlEvents: .TouchUpInside) 这是我单击时的按钮操作

我在工作的项目中,我必须根据datepicker值设置按钮标题

我的设计如下

现在我的代码如下所示

这是我在tableviewCell中设置的按钮

  let btn_start_time = cell.viewWithTag(2) as! UIButton
  btn_start_time.addTarget(self, action: #selector(btnStartTimePressed), forControlEvents: .TouchUpInside)
这是我单击时的按钮操作方法

func btnStartTimePressed(sender: UIButton!)  {
        let buttonPosition = sender.convertPoint(CGPointZero, toView: self.tbl_availability)
        let indexPath = self.tbl_availability.indexPathForRowAtPoint(buttonPosition)
        UtilityHandler.addpopupZoomAnimationTopickerView(view_time_picker, view: self.view)
        time_picker.addTarget(self, action: Selector(datepickeractionmethod(time_picker)), forControlEvents: .ValueChanged)
        sender.setTitleColor(BUTTON_BLACK_COLOR_222222, forState: .Normal)
        sender.setTitle(strDate as String, forState: .Normal)   
}
这是我的日期选择器操作方法

 func datepickeractionmethod(sender : UIDatePicker) {
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "hh:mm a"
        strDate = dateFormatter.stringFromDate(self.time_picker.date)
 }
我想在更改日期选择器值时更改按钮标题

我试过了
1) 我在datepicker操作方法中使用额外的参数作为按钮,并在其中设置标题,但当我单击按钮时,它也会更改,而不是当我的datepicker值更改时
2) 我试图设置成按钮操作方法,但当我点击按钮时,它起作用了


请帮助我。

您需要为track click button声明全局按钮实例

class ViewController: UIViewController{
    var clickedButton : UIButton

func btnStartTimePressed(sender: UIButton!)  {
        let buttonPosition = sender.convertPoint(CGPointZero, toView: self.tbl_availability)
        let indexPath = self.tbl_availability.indexPathForRowAtPoint(buttonPosition)
        UtilityHandler.addpopupZoomAnimationTopickerView(view_time_picker, view: self.view)
        time_picker.addTarget(self, action: Selector(datepickeractionmethod(time_picker)), forControlEvents: .ValueChanged)
        sender.setTitleColor(BUTTON_BLACK_COLOR_222222, forState: .Normal)
        clickedButton = sender
}

 func datepickeractionmethod(sender : UIDatePicker) {
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "hh:mm a"
        strDate = dateFormatter.stringFromDate(self.time_picker.date)
        clickedButton.setTitle(strDate as String, forState: .Normal)
 }

创建一个枚举并创建其实例以检查当前显示的选取器是startTime还是endTime,还创建两个字符串实例以保存选取器中的值

enum TimeType {
    case StartTime
    case EndTime
}

var timeType: TimeType?
var startTime = "Start Time"
var endTime = "End Time"
现在在
cellForRowAt indepath
中使用这两个字符串对象

let btn_start_time = cell.viewWithTag(2) as! UIButton
btn_start_time.addTarget(self, action: #selector(btnStartTimePressed), forControlEvents: .TouchUpInside)
btn_start_time.setTitle(startTime, for: .normal)

let btn_start_time = cell.viewWithTag(3) as! UIButton
btn_start_time.addTarget(self, action: #selector(btnEndTimePressed), forControlEvents: .TouchUpInside)
btn_start_time.setTitle(endTime, for: .normal)
现在在按钮操作中设置枚举实例

func btnStartTimePressed(sender: UIButton!)  {
   UtilityHandler.addpopupZoomAnimationTopickerView(view_time_picker, view: self.view)
    time_picker.addTarget(self, action:#selector(datepickeractionmethod(_:)), forControlEvents: .ValueChanged)

    //Set which picker is Shown
    timeType = .StartTime
}

func btnEndTimePressed(sender: UIButton!)  {
    let buttonPosition = sender.convertPoint(CGPointZero, toView: self.tbl_availability)
    let indexPath = self.tbl_availability.indexPathForRowAtPoint(buttonPosition)
    UtilityHandler.addpopupZoomAnimationTopickerView(view_time_picker, view: self.view)
    time_picker.addTarget(self, action: #selector(datepickeractionmethod(_:)), forControlEvents: .ValueChanged)

    //Set which picker is Shown
    timeType = .EndTime
}
现在在datePicker操作中使用此枚举

func datepickeractionmethod(sender : UIDatePicker) {
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "hh:mm a"
    let time = dateFormatter.stringFromDate(self.time_picker.date)
    if self.timeType = .StartTime {
        self.startTime = time
    }
    else {
        self. endTime = time
    }

    //Now simply reload tableView or you can even reload single row that contains these two buttons.
    self.tableView.reloadData() 
}

在tableView中是否有这样的多个按钮?@NiravD是的,我有2个按钮用于设置日期选择器的值。对于每个按钮,我打开datepicker并希望在同一单元格中设置DatePickerin的值?或者在不同的单元格?相同的单元格2按钮,等等,我将上传我的design@NiravD签出设计它在self.timeType=中显示错误。StarttimeWait我正在检查它是否正常工作,但所有行的值都已更改。现在我该怎么解决呢?你所说的“所有行值已更改”是什么意思?请添加整个
cellforrowatinexpath
,这会让你更清楚地知道你在做什么。意思是当我单击第1行并将值更改为datepicker时,所有行r都会用该值更新