簡體   English   中英

tableView單元格內的PickerView

[英]PickerView inside tableView cell

我創建了一個帶有日期差的tableview並創建了該數量的tableview單元格,每個表視圖單元格都由textview和picker視圖組成,針對textview來選擇值。 問題是當我使用PickerView選擇1位置的值時,所選值也反映在另一個單元格上

控制器代碼
這里hfDetailsArr包含總天數差異

 --function for getting date difference count  {
  let dateFormatter = DateFormatter()

                    dateFormatter.dateFormat = "dd/MM/yyyy"
                    let currentCalendar = NSCalendar.current

                    dateFormatter.date(from: dateFormatter.string(from:date1 as Date))

                    let temp = currentCalendar.dateComponents([.day], from:  dateFormatter.date(from: dateFormatter.string(from:date1 as Date))!, to:  dateFormatter.date(from: dateFormatter.string(from:date2 as Date))!)

                    hfDetailsArr.removeAllObjects();
                    //print(temp.day!)

                    if !(temp.day! < 0) && (temp.day! != 0) {
                    for i in 0 ..< (temp.day! + 1){
                        let HFDetailsDates = currentCalendar.date(byAdding: .day, value: i, to: date1 as Date)
                        DataDetails = dateFormatter.string(from: HFDetailsDates!)
                        hfDetailsArr.add(DataDetails)
                         ApplyForDate.append( dateFormatter.string(from: HFDetailsDates!) + ",")

                        }
                //print(ApplyForDate)
                    }
            HFDEtailsTable.reloadData()

}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if hfDetailsArr.count < 0 && hfDetailsArr.count != 0 {
        return 0
    }else{
    return hfDetailsArr.count

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

    let cell : HFDetailsCell! = tableView.dequeueReusableCell(withIdentifier: "cell") as! HFDetailsCell

    cell.txtHFDateFeild.text = hfDetailsArr[indexPath.row] as? String
       cell.cellDelegate = self
    return cell

}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("indeddsdsd \(indexPath.row)")

}

里面帶有pickerview的UITableview單元格的代碼

protocol HFDetailsCellDelegate : class {
    func ValueSelectedChage(sender:HFDetailsCell ,Id:String ,selectedCell:String)
}

class HFDetailsCell: UITableViewCell,UITextFieldDelegate,UIPickerViewDelegate,UIPickerViewDataSource{

    @IBOutlet var txtHFPicker: UITextField!
    @IBOutlet var txtHFDateFeild: UITextField!
   @IBOutlet  var pickerView: UIPickerView! = UIPickerView()
   var HfDtailsOneArr = ["Select","Full Day Leave","Half Day Leave"]
    var position = 0
    //var intHFStatusDetail = ""
   /// internal static var HFtableView = UITableView()
    weak var cellDelegate: HFDetailsCellDelegate?
  //var LeaveDataIDArr = [String?]()

    override func awakeFromNib() {
        txtHFDateFeild.delegate = self
        pickerView.delegate = self
        txtHFPicker.inputView  = pickerView
        pickerView.backgroundColor = UIColor.white
        super.awakeFromNib()
        // Initialization code


    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

    @IBAction func txtleaveType(_ sender: UITextField) {



    }


 //print("buttonclick")

//    //UIpickerView
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
    //Set number of rows in components

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

        return self.HfDtailsOneArr.count

    }
    //Set title for each row
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

        return HfDtailsOneArr[row]


    }
    // Update textfield text when row is selected
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
         //  self.cellDelegate?.ValueSelectedChage(sender:self, Id: HFDetailsLeaveCount(position: row), selectedCell: "")
        txtHFPicker.text = HfDtailsOneArr[row]
       print("pickerText:\(txtHFPicker.text!)")

    }
        func HFDetailsLeaveCount(position:Int)-> String {

            switch position {
            case 0:
                return "0"
            case 1:
                return "8"
            case 2:
                return "4"
            default:
                return "nil"
            }

    }
 }

圖片1

圖片2

在上圖中,如果我選擇日期04/08的值,則12/08會反映相同的值

-任何幫助將不勝感激。 謝謝

在表格單元格中,在選擇器選擇上調用ValueSelectedChage委托方法

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
       self.cellDelegate?.ValueSelectedChage(sender:self, Id: HFDetailsLeaveCount(position: row), selectedCell: HfDtailsOneArr[row])
       txtHFPicker.text = HfDtailsOneArr[row]
       print("pickerText:\(txtHFPicker.text!)")
}

在viewcontroller中創建一個變量以保留選定的值

var hfSelectedDetails: [String: String?]?

在viewcontroller中實現委托方法

func ValueSelectedChage(sender:HFDetailsCell ,Id:String ,selectedCell:String) {
     let indexpath = self.tableView.indexPathForRowAtPoint(cell.center)
     let key = "\(indexpath.row)"
     hfSelectedDetails[key] = selectedCell
     ....//other code if any
}

並在cellForRow添加

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

    let cell : HFDetailsCell! = tableView.dequeueReusableCell(withIdentifier: "cell") as! HFDetailsCell

    cell.txtHFDateFeild.text = hfDetailsArr[indexPath.row] as? String
    cell.cellDelegate = self
    let key = "\(indexPath.row)"
    if let selectedValue = hfSelectedDetails[key] {
        cell.txtHFPicker.text = selectedValue
    } else {
        cell.txtHFPicker.text = nil
    }
    return cell

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM