Кнопка перекрывается чем-то и не работает должным образом - PullRequest
0 голосов
/ 20 марта 2019

Я создал собственное представление, которое содержит указатель даты и кнопку отправки.когда я создаю и вызываю это представление в контроллере представления, кнопка не работает немедленно, мне нужно поиграть с набором датчиков, прежде чем он заработает.Я чувствую, что я как-то испортил свои ограничения, так как я довольно новичок в этом.Любая помощь приветствуется.

Это мой пользовательский код просмотра

func setupDatePicker() {
    datepicker = UIDatePicker()
    datepicker.minimumDate = Date()
    datepicker.addTarget(self, action: #selector(datePicker(sender:)), for: .valueChanged)
    datepicker.setValue(Colors.starYellow, forKey: "textColor")
}

func setupButton(){
    submitButton = CustomButton()
    submitButton.setTitle("Submit", for: .normal)
    submitButton.addTarget(self, action: #selector(dateSubmission(sender:)), for: .touchUpInside)

}

func addingSubviews() {
    setupButton()
    addSubview(submitButton)
    bringSubviewToFront(submitButton)
    setupDatePicker()
    addSubview(datepicker)
}



func setupConstraints(){

    addingSubviews()
    //Custom View Constraints
    translatesAutoresizingMaskIntoConstraints = false
    leadingAnchor.constraint(equalTo: superview!.leadingAnchor, constant: 20).isActive = true
    trailingAnchor.constraint(equalTo: superview!.trailingAnchor, constant: -20).isActive = true
    heightAnchor.constraint(equalToConstant: 80).isActive = true
    centerYAnchor.constraint(equalTo: superview!.centerYAnchor).isActive = true
    backgroundColor = Colors.darkBackground
    layer.cornerRadius = 15

    //DatePicker Constraints
    datepicker.translatesAutoresizingMaskIntoConstraints = false
    datepicker.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 10).isActive = true
    datepicker.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -10).isActive = true
    datepicker.heightAnchor.constraint(equalToConstant: 50).isActive = true
    datepicker.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true


    // Button Constraints

    submitButton.translatesAutoresizingMaskIntoConstraints = false
    submitButton.leadingAnchor.constraint(equalTo: datepicker.leadingAnchor, constant: 100).isActive = true
    submitButton.trailingAnchor.constraint(equalTo: datepicker.trailingAnchor, constant: -100).isActive = true
    submitButton.heightAnchor.constraint(equalToConstant: 30).isActive = true
    submitButton.bottomAnchor.constraint(equalTo: datepicker.bottomAnchor, constant: 35).isActive = true



}


override func didMoveToSuperview() {
   setupConstraints()
}


@objc func datePicker(sender: UIDatePicker){
    self.datepicked = sender.date
    print("Date selected: \(datepicked)")
}

Эта функция не вызывается

    @objc func dateSubmission(sender: CustomButton){
        sender.shake()
        let currentDate = Date()
        let interval = datepicked?.timeIntervalSince(currentDate)
        print(interval)
        let notifcation = UNMutableNotificationContent()
        notifcation.title = notificationTitle ?? "title empty"
        notifcation.subtitle = "test"
        notifcation.body = "test2"
        notifcation.badge = 1

        let trigger = UNTimeIntervalNotificationTrigger(timeInterval: interval!, repeats: false)
        let request = UNNotificationRequest(identifier: "taskReminder", content: notifcation, trigger: trigger)
        UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
    }


}

и вот как я создал свой собственный вид в своем контроллере вида, в котором я хочу отобразить вид.

var customView: CustomView!
 func createReminderView(indexPath: IndexPath){
    let task = tasks[indexPath.row]

    customView = CustomView()
    customView.notificationTitle = task.task
    view.addSubview(customView)
    view.bringSubviewToFront(customView)
    }

Спасибо за ваше время.

Просмотр отладчика: enter image description here

1 Ответ

0 голосов
/ 20 марта 2019

Я чертовски уверен, что если вы установите clipsToBounds = true , вы не сможете увидеть кнопку.потому что вам не хватает высоты для вашего пользовательского представления

Я вижу ошибку в ограничениях

1) Высота пользовательского просмотра равна 80, но высота Datepicker 50 и начните с центра вашего пользовательского просмотра, так что это y Позиция будет 15

2) Кнопка "Отправить" Высота - 30, также сверху - 35 из средства выбора даты, для которого доступно только 15 пикселейвнизу (из-за центра Y)

Решение:

Ваше ограничение должно быть

DatePicker = -> Leading (CustomView), Trailing (CustomView), Top (CustomView), Bottom (кнопка Submit)

Custom Button = -> Leading, Trailing, в соответствии с вашими требованиями, Bottom (CustomView), Height (30)

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