Как добавить текущее время к метке в ячейке табличного представления Swift 3

У меня есть кнопка добавления, которая переводит вас в новое представление с вводом текста для добавления информации. как только вы нажмете кнопку «Добавить», вы вернетесь к просмотру таблицы и добавит все входные данные к меткам. У меня возникли проблемы с переносом текущего времени на метку dateStamp, которую я сделал. кто-нибудь может помочь?

Главный контроллер

 var dateStamp = Date()
 var clientName = [""]
 var projecDescript = [""]

// Custom cell to make all input fields custom
class CustomCell: UITableViewCell {
    //Make your outlets here, connect the outlets from cell in your storyboard

    @IBOutlet var clientNameLabel: UILabel!
    @IBOutlet var descriptionLabel: UILabel!
    @IBOutlet var dateStamp: UILabel!

}

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet var clientTableList: UITableView!

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return (clientName.count)
        return (projecDescript.count)
    }

    // This is the new items added into the inputs
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let cell = tableView.dequeueReusableCell(withIdentifier: "clientCell", for: indexPath) as! CustomCell

        // Adds Clients Name
        let companyName = clientName[indexPath.row]
        cell.clientNameLabel?.text = companyName

        // Adds Clients Description
        let descriptionName = projecDescript[indexPath.row]
        cell.descriptionLabel?.text = descriptionName



        return cell
    }

    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        return true
    }

    override func viewDidAppear(_ animated: Bool) {
        clientTableList.reloadData()
    }

Второй контроллер

import UIKit

class AddInvoice: UIViewController {

    @IBOutlet var clientNameInput: UITextField!
    @IBOutlet var descriptionNameInput: UITextView!



    @IBAction func addInvoice(_ sender: Any) {

        if clientNameInput.text != "" && descriptionNameInput.text != "" 
        {
            clientName.append(clientNameInput.text!)
            //clientInput.text = ""

            projecDescript.append(descriptionNameInput.text!)
            //descriptionFieldInput.text = ""


            _ = navigationController?.popViewController(animated: true)
        }  
    }
}

person Blue Moose    schedule 20.08.2017    source источник


Ответы (2)


let timeStamp = "\(DateFormatter.localizedString(from: Date(), dateStyle: .long, timeStyle: .long))"

если вы хотите преобразовать формат на сегодняшний день

просто передайте дату этой функции, и она вернет строку, в которой говорится, что 3 недели назад

func relativePast(for date : Date) -> String {

    let units = Set<Calendar.Component>([.year, .month, .day, .hour, .minute, .second, .weekOfYear])
    let components = Calendar.current.dateComponents(units, from: date, to: Date())

    if components.year! > 0 {
        return "\(components.year!) " + (components.year! > 1 ? "years ago" : "year ago")

    } else if components.month! > 0 {
        return "\(components.month!) " + (components.month! > 1 ? "months ago" : "month ago")

    } else if components.weekOfYear! > 0 {
        return "\(components.weekOfYear!) " + (components.weekOfYear! > 1 ? "weeks ago" : "week ago")

    } else if (components.day! > 0) {
        return (components.day! > 1 ? "\(components.day!) days ago" : "Yesterday")

    } else if components.hour! > 0 {
        return "\(components.hour!) " + (components.hour! > 1 ? "hours ago" : "hour ago")

    } else if components.minute! > 0 {
        return "\(components.minute!) " + (components.minute! > 1 ? "minutes ago" : "minute ago")

    } else {
        return "\(components.second!) " + (components.second! > 1 ? "seconds ago" : "second ago")
    }
}
person Abdul Waheed    schedule 21.08.2017
comment
Спасибо это было то, что я искал! Я не могу проголосовать за это, пока моя репутация не будет 15, извините за это! Есть ли короткий способ сделать это сказать... 1 минуту назад. 1 день назад. 2 недели назад и т. д. или мне нужно будет построить функцию для этого - person Blue Moose; 22.08.2017
comment
Это потрясающе! имеет смысл и проще, чем то, что я собирался сделать! - person Blue Moose; 24.08.2017

Для этого вы можете использовать делегат! По крайней мере, это то, что я узнал.

Передача данных с использованием метода делегата

person Siyavash    schedule 20.08.2017
comment
нет, я понимаю эту часть. Он добавляет отметку времени, с которой я борюсь. - person Blue Moose; 21.08.2017
comment
хм, у вас проблемы с получением временной метки? или у вас есть временная метка, но вы не знаете, как добавить ее в метку? если это второй случай, то, как упоминалось в видео, когда пользователь нажимает кнопку добавления, вы получаете текущую отметку времени и отправляете ее обратно, а затем добавляете ее к метке - person Siyavash; 21.08.2017
comment
нет, я думаю, что я борюсь с получением временной метки в первую очередь. Я посмотрел в Интернете на несколько вещей, и все, что я пробовал, кажется, не работает. Я сделал var dateStamp = Date(). Теперь я пытаюсь получить это, когда нажимаю кнопку «Добавить счет». - person Blue Moose; 21.08.2017