Програмно бутон в персонализирана анотация

Правя изглед на анотация, който включва персонализиран бутон. Когато този бутон бъде докоснат, той трябва да направи нещо. Първо ще се опитам да го отпечатам. Тъй като работи сега, анотационният изглед се затваря, без да отпечатва нищо. Затваря се, защото правя бутон.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(), защото сте задали избрано на false, така че операторът ви винаги е неуспешен и отива към else.

Вашият ред: super.setSelected(false, animated: animated)

трябва да бъде: super.setSelected(избрано, анимирано: анимирано)

person karnett    schedule 25.01.2017
comment
Съжалявам, не промених нищо - person jonask; 25.01.2017
comment
Задайте някои точки на прекъсване и разберете какво се случва с избраните и защо вашият оператор if се проваля. - person karnett; 26.01.2017
comment
Не операторът if е неуспешен. В проекта също персонализирах някои етикети в оператора if и работи добре. Но бутонът не реагира - person jonask; 26.01.2017
comment
Излизам от кода, който публикувахте, вашата настройка на целта в израза if и вашето премахване от супер изглед е в else. Казахте, че премахването от суперизглед се изпълнява, което означава, че целта ви не се задава в оператора if. Но добре. Късмет. - person karnett; 28.01.2017