Программно кнопка в пользовательской аннотации

Я делаю аннотацию, которая включает настраиваемую кнопку. Когда эта кнопка нажата, она должна что-то делать. Сначала попробую распечатать. Как это работает сейчас, представление аннотаций закрывается, ничего не печатая. Его закрытие, потому что я делаю button.removeFromSuperview. Вот как это выглядит очень кратко, и сосредоточьтесь только на кнопке

class CustomAnnotation:  MKPinAnnotationView, MKMapViewDelegate, CLLocationManagerDelegate {

let infoButton : UIButton = UIButton.init(frame:CGRect(x: 250, y: -300, width: 40, height: 40))

override func setSelected(_ selected: Bool, animated: Bool) {

    super.setSelected(true, animated: animated)

    if(selected) {

    infoButton.setImage(UIImage(named:"home.png"), for: .normal)
    infoButton.addTarget(self, action: #selector(sayHello), for:.touchUpInside)

self.addSubview(infoButton)

} else {

infoButton.removeFromSuperview()

}

func sayHello(sender: UIButton!) {
print("I should print something...")
  }
}

Все в настроенном виде аннотаций выглядит великолепно. Я вызываю класс CustomAnnotation в свой Viewcontroller в функции viewForAnnotation.


person jonask    schedule 25.01.2017    source источник


Ответы (1)


Он выполняет .removeFromSuperview(), потому что вы устанавливаете для selected значение false, поэтому ваш оператор if всегда терпит неудачу и переходит к другому.

Ваша строка: super.setSelected(false, анимированный: анимированный)

должно быть: super.setSelected(выбрано, анимированно: анимированно)

person karnett    schedule 25.01.2017
comment
Извините, ничего не менял - person jonask; 25.01.2017
comment
Установите несколько точек останова и выясните, что происходит с selected и почему ваш оператор if не работает. - person karnett; 26.01.2017
comment
Это не оператор if, который терпит неудачу. В проекте я также настроил некоторые метки внутри оператора if, и он отлично работает. Но кнопка не реагирует - person jonask; 26.01.2017
comment
Я ухожу от кода, который вы опубликовали, вы устанавливаете цель в операторе if, а ваше удаление из суперпредставления находится в другом. Вы сказали, что удаление из супервизора выполняется, что означает, что ваша цель не устанавливается в операторе if. Но ладно. Удачи. - person karnett; 28.01.2017