How to prevent custom MKAnnotationViews from reverting back to using the default color and glyph image?












0















I have a few MKMapViews on separate tabs of a UITabBarController. Each map uses custom MKAnnotationViews for MKAnnotations and MKClusterAnnotations. The custom MKAnnotationViews are green with star glyph or green with a number if it's for a cluster.



The problem is that my custom MKAnnotationViews are randomly reverting back to the default appearance of red with a pin glyph. When I zoom in, the views will start to redraw and be right. I haven't been able to consistently reproduce the issue, but it seems to occur when I navigate away from a tab then return.



Is there a way to force a reload on map view similar to reloadData() on a collection view? My viewForAnnotation func shouldn't ever return nil so I don't know how this could be happening.



 func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
var view = mapView.dequeueReusableAnnotationView(withIdentifier: "CustomAnnotationView") as? CustomAnnotationView
if view == nil {
view = CustomAnnotationView(annotation: annotation, reuseIdentifier: "CustomAnnotationView")
} else {
view?.annotation = annotation
}
return view

// code for the cluster annotations redacted
}









share|improve this question

























  • Add if annotation is MKUserLocation { return nil } to viewFor annotation method.

    – Kosuke Ogawa
    Nov 14 '18 at 4:01











  • @KosukeOgawa thanks for the response! However, the problem persists even with that line included.

    – Camden Gaba
    Nov 14 '18 at 19:02
















0















I have a few MKMapViews on separate tabs of a UITabBarController. Each map uses custom MKAnnotationViews for MKAnnotations and MKClusterAnnotations. The custom MKAnnotationViews are green with star glyph or green with a number if it's for a cluster.



The problem is that my custom MKAnnotationViews are randomly reverting back to the default appearance of red with a pin glyph. When I zoom in, the views will start to redraw and be right. I haven't been able to consistently reproduce the issue, but it seems to occur when I navigate away from a tab then return.



Is there a way to force a reload on map view similar to reloadData() on a collection view? My viewForAnnotation func shouldn't ever return nil so I don't know how this could be happening.



 func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
var view = mapView.dequeueReusableAnnotationView(withIdentifier: "CustomAnnotationView") as? CustomAnnotationView
if view == nil {
view = CustomAnnotationView(annotation: annotation, reuseIdentifier: "CustomAnnotationView")
} else {
view?.annotation = annotation
}
return view

// code for the cluster annotations redacted
}









share|improve this question

























  • Add if annotation is MKUserLocation { return nil } to viewFor annotation method.

    – Kosuke Ogawa
    Nov 14 '18 at 4:01











  • @KosukeOgawa thanks for the response! However, the problem persists even with that line included.

    – Camden Gaba
    Nov 14 '18 at 19:02














0












0








0








I have a few MKMapViews on separate tabs of a UITabBarController. Each map uses custom MKAnnotationViews for MKAnnotations and MKClusterAnnotations. The custom MKAnnotationViews are green with star glyph or green with a number if it's for a cluster.



The problem is that my custom MKAnnotationViews are randomly reverting back to the default appearance of red with a pin glyph. When I zoom in, the views will start to redraw and be right. I haven't been able to consistently reproduce the issue, but it seems to occur when I navigate away from a tab then return.



Is there a way to force a reload on map view similar to reloadData() on a collection view? My viewForAnnotation func shouldn't ever return nil so I don't know how this could be happening.



 func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
var view = mapView.dequeueReusableAnnotationView(withIdentifier: "CustomAnnotationView") as? CustomAnnotationView
if view == nil {
view = CustomAnnotationView(annotation: annotation, reuseIdentifier: "CustomAnnotationView")
} else {
view?.annotation = annotation
}
return view

// code for the cluster annotations redacted
}









share|improve this question
















I have a few MKMapViews on separate tabs of a UITabBarController. Each map uses custom MKAnnotationViews for MKAnnotations and MKClusterAnnotations. The custom MKAnnotationViews are green with star glyph or green with a number if it's for a cluster.



The problem is that my custom MKAnnotationViews are randomly reverting back to the default appearance of red with a pin glyph. When I zoom in, the views will start to redraw and be right. I haven't been able to consistently reproduce the issue, but it seems to occur when I navigate away from a tab then return.



Is there a way to force a reload on map view similar to reloadData() on a collection view? My viewForAnnotation func shouldn't ever return nil so I don't know how this could be happening.



 func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
var view = mapView.dequeueReusableAnnotationView(withIdentifier: "CustomAnnotationView") as? CustomAnnotationView
if view == nil {
view = CustomAnnotationView(annotation: annotation, reuseIdentifier: "CustomAnnotationView")
} else {
view?.annotation = annotation
}
return view

// code for the cluster annotations redacted
}






ios mapkit mkmapview mkannotation mkannotationview






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 14 '18 at 19:03







Camden Gaba

















asked Nov 13 '18 at 20:49









Camden GabaCamden Gaba

814




814













  • Add if annotation is MKUserLocation { return nil } to viewFor annotation method.

    – Kosuke Ogawa
    Nov 14 '18 at 4:01











  • @KosukeOgawa thanks for the response! However, the problem persists even with that line included.

    – Camden Gaba
    Nov 14 '18 at 19:02



















  • Add if annotation is MKUserLocation { return nil } to viewFor annotation method.

    – Kosuke Ogawa
    Nov 14 '18 at 4:01











  • @KosukeOgawa thanks for the response! However, the problem persists even with that line included.

    – Camden Gaba
    Nov 14 '18 at 19:02

















Add if annotation is MKUserLocation { return nil } to viewFor annotation method.

– Kosuke Ogawa
Nov 14 '18 at 4:01





Add if annotation is MKUserLocation { return nil } to viewFor annotation method.

– Kosuke Ogawa
Nov 14 '18 at 4:01













@KosukeOgawa thanks for the response! However, the problem persists even with that line included.

– Camden Gaba
Nov 14 '18 at 19:02





@KosukeOgawa thanks for the response! However, the problem persists even with that line included.

– Camden Gaba
Nov 14 '18 at 19:02












1 Answer
1






active

oldest

votes


















0














Problem solved. I, apparently, needed to style the markers in the prepareForReuse function on the cluster subclasses.



override func prepareForReuse() {
super.prepareForReuse()

style()
}





share|improve this answer

























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53289291%2fhow-to-prevent-custom-mkannotationviews-from-reverting-back-to-using-the-default%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    Problem solved. I, apparently, needed to style the markers in the prepareForReuse function on the cluster subclasses.



    override func prepareForReuse() {
    super.prepareForReuse()

    style()
    }





    share|improve this answer






























      0














      Problem solved. I, apparently, needed to style the markers in the prepareForReuse function on the cluster subclasses.



      override func prepareForReuse() {
      super.prepareForReuse()

      style()
      }





      share|improve this answer




























        0












        0








        0







        Problem solved. I, apparently, needed to style the markers in the prepareForReuse function on the cluster subclasses.



        override func prepareForReuse() {
        super.prepareForReuse()

        style()
        }





        share|improve this answer















        Problem solved. I, apparently, needed to style the markers in the prepareForReuse function on the cluster subclasses.



        override func prepareForReuse() {
        super.prepareForReuse()

        style()
        }






        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Nov 16 '18 at 17:42

























        answered Nov 14 '18 at 20:25









        Camden GabaCamden Gaba

        814




        814






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53289291%2fhow-to-prevent-custom-mkannotationviews-from-reverting-back-to-using-the-default%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Florida Star v. B. J. F.

            Error while running script in elastic search , gateway timeout

            Adding quotations to stringified JSON object values