Пустое пространство между таблицей и датой выбора - PullRequest
0 голосов
/ 13 июня 2019

я сделал отображение / скрытие выбора даты по нажатию кнопки и показ даты на кнопке, используя Tableview. но когда я запускаю это, появляется странное пустое пространство между таблицей и датой. когда я щелкаю это место, появляется ошибка

'Поток 1: фатальная ошибка: неожиданно обнаружен ноль при развертывании необязательного значения'

Я думал, что это потому, что я установил ячейки прототипа: 1. поэтому я установил 0, но тоже не сработал.

1

var dateFormatter = DateFormatter()
var datePickerIndexPath: NSIndexPath?
var datepicker : UIDatePicker?

@IBOutlet weak var ddn: UIButton!
@IBOutlet weak var TV: UITableView!
override func viewDidLoad() { 
   super.viewDidLoad() 

      TV.isHidden=true

      datepicker = UIDatePicker()
      datepicker? = UIDatePicker.init(frame: CGRect(x:0, y:40, width:252, height:150))
      datepicker?.setValue(UIColor(red:0.95, green:0.92, blue:0.90, alpha:1.0), forKeyPath: "textColor")
      datepicker?.datePickerMode = .date
      datepicker?.addTarget(self, action: #selector(datepickerViewController.dateChanged(datepicker: )),for: .valueChanged)



      TV.addSubview(datepicker!)
}

... 
button click action/animate
...


// часть вида talbe //

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        var rows = 1
        if datePickerIndexPath != nil {rows += 1 }
        return rows
    }


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

        let cell = tableView.dequeueReusableCell(withIdentifier: "DatePickerCell", for: indexPath)
        cell.textLabel?.text = dateFormatter.string(from: (datepicker?.date)!)

        return cell
    }


    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        ddn.setTitle("\(datePickerIndexPath!.row)", for: .normal)
        //when i click the space, an error occurs in this part//

    }
}


1 Ответ

0 голосов
/ 14 июня 2019

Ваш код сбой, потому что datePickerIndexPath является необязательным значением, которое никогда не устанавливается .Объявление этого значения не дает никакой переменной значение:

var datePickerIndexPath: NSIndexPath?

Таким образом, значение datePickerIndexPath равно нулю.

Решением было бы просто избавиться от этогопеременная полностью.Затем измените этот код:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    ddn.setTitle("\(datePickerIndexPath!.row)", for: .normal)

}

На это:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    ddn.setTitle("\(indexPath.row)", for: .normal)

}

Метод didSelectRowAt уже дает вам indexPath, который сообщает вам строку, выбранную пользователем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...