MKAnnotationView, Swift - «Предоставлено неверное имя ресурса CUICatalog: ''" - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь напечатать подтекст в нескольких аннотациях, который показывает, когда нажимается кнопка. Поэтому я создал следующий цикл for для создания аннотаций:

        for location in locations {
        let annotation = customAnnotation()
        annotation.title = location.title
        annotation.subtext= location.subtext
        annotation.coordinate = CLLocationCoordinate2D (latitude: location.latitude, longitude: location.longitude)
        let timeAInt= Int(location.timeA)
        let timeBInt= Int(location.timeB)
        if timeAInt... timeBInt ~= Hour { annotation.icon = "testPin1" }
        else { annotation.icon = "testPin2" }
        map.addAnnotation(annotation)
    }
    self.map.delegate = self
}

я использую этот класс для аннотации:

class customAnnotation: MKPointAnnotation {
var isCollapsed = true
var setNeedsToggle = false

var subtext: String = ""
var icon: String = ""   }

и я использую эту функцию для описания свойства пинов:

    func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    guard let annot = annotation as? customAnnotation else { return nil }

    if annotation is MKUserLocation {
        return nil
    }
    let annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "customAnnotation")
    annotationView.image = UIImage(named: annot.icon)
    annotationView.canShowCallout = true

    let rightButton = UIButton(type: .infoLight)
    rightButton.setImage(UIImage(named: annot.isCollapsed ? "ic_showmore" : "ic_showless"), for: .normal)
    annotationView.rightCalloutAccessoryView = rightButton

    if (annot.isCollapsed) {
        annotationView.detailCalloutAccessoryView = nil
    }
    else {
        print(annot.subtext)
        let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
        label.text = "any text"
        label.font = UIFont.italicSystemFont(ofSize: 14.0)
        label.numberOfLines = 0
        annotationView.detailCalloutAccessoryView = label

        label.widthAnchor.constraint(lessThanOrEqualToConstant: label.frame.width).isActive = true
        label.heightAnchor.constraint(lessThanOrEqualToConstant: 90.0).isActive = true
    }
    return annotationView
}

цикл if / else описывает заголовок и подтекст, который отображается при нажатии кнопки справа.

Моя проблема сейчас: когда я пишу «print (annot.subtext)» в часть if, он фактически печатает подтекст, который я назначаю этой специальной аннотации. Теперь моя цель - записать его как фактический подтекст, который появляется, когда нажимается кнопка с комментариями справа. Поэтому я написал "label.text = annot.subtext" внутри else-части, но ничего не произошло.

Я попытался отладить и написал "label.text =" любой текст "", и он фактически показал "любой текст" как подтекст моей аннотации при нажатии кнопки. После этого я поместил «print (annot.subtext)» в else-часть перед «label.text =« any text »», но он этого не печатал. Вместо этого он показал ошибку: «Указано недопустимое имя ресурса CUICatalog:« », в то же время записывая« любой текст »в выноску аннотации

Мне интересно, потому что при поиске этого кода ошибки в Интернете всегда возникала какая-то проблема с файлами изображений или видео, но на этот раз она просто обнаружилась, когда я вставил тот же код, что и в часть if, в остальное-часть.

Может быть, у некоторых из вас есть идея!

Большое спасибо,

Гусь

...