【问题标题】:continuing from cell swift 3从单元格 Swift 3 继续
【发布时间】:2017-10-30 00:45:04
【问题描述】:

我目前无法从另一个函数中的单元格继续,以下是我的代码。任何帮助将不胜感激!

private func datePickerCell(tableView: UITableView, indexPath: IndexPath, property: Property, with value: String, with name: String, changeHandler: @escaping((String) -> Bool)) -> FUISimplePropertyFormCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: FUISimplePropertyFormCell.reuseIdentifier, for: indexPath) as! FUISimplePropertyFormCell

    // toolbar
    let toolbar = UIToolbar()
    toolbar.sizeToFit()

    // bar button item
    let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(donePressed)) //<-- calls the outside function
    toolbar.setItems([doneButton], animated: false)
    cell.valueTextField.inputAccessoryView = toolbar

    //assigning date picker to text field
    cell.valueTextField.inputView = datePicker

    cell.isEditable = true
    cell.keyName = name
    cell.value = value

    return cell


}

func donePressed(){ //<-- function that gets called by the done button
    cell.valueTextField.text = "\(datePicker.date)" // <-- ERROR
    // i'd like to continue editing the cell here

}

【问题讨论】:

  • 继续编辑你的意思是你想在同一个单元格中添加更多内容吗?如果从我从您的问题中了解到的情况是这样,您可以使用条件语句来检查单元格中是否有数据,然后不要调用日期选择器,而是附加到单元格中。这意味着如果数据存在于单元格中{不要调用日期选择器,并使单元格可编辑}这是我从你的问题中理解的内容。澄清我是否正确,也许我可以提供帮助
  • 是的,你完全正确,我想将 cell.valueTextField.text 的值更改为用户点击日期选择器中的完成按钮时选择的当前日期
  • 哦,你的意思是等一下,我会给你提供代码

标签: uitableview swift3


【解决方案1】:

好的,让我用我的代码本身来解释一下。这是我为我们的应用程序制作的提醒屏幕。所以在这个屏幕中,我有一部分代码用于将时间选择器设置为输入字段。在您的情况下,它将成为 Cell。

所以这就是你的做法。检查视图是否加载功能如下: 下面的代码必须更改为您的字段名称,日期格式化程序用于格式化您要显示的样式。

如果您需要任何帮助,请告诉我。

 timeInput.layer.addSublayer(bottomLineTimePicker)
            dateFormatter.timeZone = TimeZone.current
            dateFormatter.dateStyle = .none
            dateFormatter.timeStyle = .short
            // This is the code you need //
            timeInput.text = dateFormatter.string(from: timePicker.date)

这是完整的代码。

import UIKit

class Reminder: UIViewController {

    @IBOutlet weak var timePickerStack: UIStackView!
    @IBOutlet weak var timeInput: UITextField!
    @IBOutlet weak var setReminderSwitch: UISwitch!
    @IBOutlet weak var setReminderButton: UIButton!

    let timePicker = UIDatePicker()
    let bottomLineTimePicker = CALayer()
    let dateFormatter = DateFormatter()

    @IBAction func setReminder(_ sender: UIButton) {

        let nextDate = NotificationManager.shared.schedule(time: self.timePicker.date, repeats: true)

        if nextDate != nil {

            print("\(nextDate!.timeIntervalSinceNow.formattedTime)")

        }
        setReminderStatus(reminderStatus: true,reminderTime:self.timePicker.date)

    }

    func createTimePicker(){

        timePicker.datePickerMode = .time

        let toolBar = UIToolbar()
        toolBar.sizeToFit()

        let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(donePressed))
        toolBar.setItems([doneButton], animated: true)

        timeInput.inputAccessoryView = toolBar
        timeInput.inputView = timePicker

    }

    func donePressed(){

        dateFormatter.dateStyle = .none
        dateFormatter.timeStyle = .short
        timeInput.text = dateFormatter.string(from: timePicker.date)
        self.view.endEditing(true)
    }

    @IBAction func reminderSwitch(_ sender: UISwitch) {

        if(sender.isOn == true){
            timePickerStack.isHidden = false
        }else{
            NotificationManager.shared.cancelAllNotifications()
            timePickerStack.isHidden = true
            unsetReminder()
        }

    }

    override func viewDidLoad() {
        super.viewDidLoad()


        if(issetReminder()){
            setReminderSwitch.setOn(true, animated: true)
            timePickerStack.isHidden = false
        }else{
            setReminderSwitch.setOn(false, animated: true)
            timePickerStack.isHidden = true
        }

        createTimePicker()

        bottomLineTimePicker.frame = CGRect(x: 0.0, y: timeInput.frame.height - 1, width: timeInput.frame.width, height: 1.0)
        bottomLineTimePicker.backgroundColor = UIColor.init(red: 23/255.5, green: 155/255.5, blue: 167/255.5, alpha: 1.0).cgColor

        timeInput.layer.addSublayer(bottomLineTimePicker)
        dateFormatter.timeZone = TimeZone.current
        dateFormatter.dateStyle = .none
        dateFormatter.timeStyle = .short
        // This is the code you need //
        timeInput.text = dateFormatter.string(from: timePicker.date)

        setReminderButton.layer.cornerRadius = 20.0
        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func backButtonPressed(_ sender: UIButton) {

        let backButtonPressed = self.storyboard?.instantiateViewController(withIdentifier: "navController") as! IndexNavController
        self.present(backButtonPressed, animated: true, completion: nil)

    }

}

extension TimeInterval{
    var formattedTime:String{

        let formatter = DateComponentsFormatter()
        formatter.unitsStyle = .brief
        formatter.includesApproximationPhrase = false
        formatter.includesTimeRemainingPhrase = false
        formatter.allowedUnits = [.hour, .minute, .second]
        formatter.calendar = Calendar.current

        return formatter.string(from: self) ?? ""

    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 2017-10-04
    • 1970-01-01
    • 2017-03-09
    • 2017-02-18
    相关资源
    最近更新 更多