2017-10-30 3 views
0

私は現在、別の機能のセルから引き続き問題を抱えています。以下は私のコードです。どんな助けでも大歓迎です!セルスウィフトから続き3

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 

} 
+0

同じ意味で、同じセルに何かを追加したいのですか?もし私があなたの質問から理解したところからは、セルがデータを持っているかどうかをチェックする条件文を使用して、セルにdatepickerを追加しないでください。意味することセル内にデータが存在する場合{datepickerを呼び出さずにセルを編集可能}これは私があなたの質問から理解していることから伺いつつあるものです。私が助けてくれるかもしれないことを明確にする –

+0

はい、まさに正しいです。ユーザーがdatepickerの完了ボタンをクリックしたときに選択された現在の日付にcell.valueTextField.textの値を変更したいと思います。 – Anthony

+0

私はあなたにコードを提供するのを待つことを意味した –

答えて

0

私のコード自体で説明しましょう。これは私のアプリのために作ったアラーム画面です。この画面では、タイムピッカーを入力フィールドに設定するためのコードの一部があります。あなたの場合、その細胞になること。

これはあなたのやり方です。以下のビューロード機能を確認してください: 以下のコードはフィールド名に変更する必要があり、日付フォーマッタは表示するスタイルを書式設定することです。

私はこれに関する助けが必要かどうかお知らせください。

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) ?? "" 

    } 
} 
関連する問題