Über Code angelegte Objekte aus dem View entfernen lassen/unsichtbar machen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Über Code angelegte Objekte aus dem View entfernen lassen/unsichtbar machen

    Hallo Leute!

    Ich habe ein kleines Problem mit dem Entfernen eines Buttons, den ich über den Code angelegt habe und nicht im Interface Builder.

    Es handelt sich um folgende Codefragmente:

    Quellcode

    1. /*Hier wird der Button mit Image erstellt*/
    2. UIButton *buttonForExtra = [UIButton buttonWithType:UIButtonTypeCustom];
    3. UIImage *imageForButton = [UIImage imageNamed:@"Symbol_Bild.png"];
    4. //Ein vorher festgelegtes Frame wird verwendet
    5. buttonForExtra.frame = frame;
    6. //Image wird zugewiesen
    7. [buttonForExtra setImage:imageForButton forState:UIControlStateNormal];
    8. /*buttonForExtra wurde im Code deklariert und buttonForExtra2 im Interfacebuilder.
    9. Beide werden als Subview in ein View geladen und werden auch angezeigt.*/
    10. [self.viewForMovie addSubview:buttonForExtra];
    11. [self.viewForMovie addSubview:buttonForExtra2];
    12. /*
    13. In einer Zeit zwischen 5 und 10 Sekunden im Video, sollen beide Buttons ausgeblendet werden!
    14. Hier kommt das Problem:
    15. Leider macht er das nur für den im Interface Builder angelegten Button, aber nicht für den im Code.
    16. Da reagiert er, sobald dieser angezeigt wird, auf garnichts mehr.
    17. */
    18. if (moviePlayer.currentPlaybackTime>5 & moviePlayer.currentPlaybackTime<10) {
    19. [self.viewForMovie sendSubviewToBack:buttonForExtra];
    20. [self.viewForMovie sendSubviewToBack:buttonForExtra2];
    21. }
    Alles anzeigen



    Meine Frage ist also: Wieso kann ich den Button, der im Code erstellt wurde, nicht auf die gleiche Weise ausblenden, wie es mit dem anderen aus dem Interface Builder funktioniert??

    Er reagiert mir irgendwie auf garkeine Änderungen, die ich vorschlage? Hängt das mit einem fehlenden "init" oder "alloc" oder "release" oder so zusammen??

    Vielen Dank für eure Hilfe, ich verzweifle gerade ein wenig daran!

    Mit freundlichen Grüßen
    Unikum
  • Erstmal vielen Dank für die schnelle Antwort.

    MCDan schrieb:

    Du solltest die Buttons bzw. Views über das hidden Property ausblenden und nicht einfach in der View Hierarchie nach hinten verschieben.


    Das habe ich auch schon versucht, selbst damit bleibt mir ärgerlicherweise der erste Button weiter vorhanden, nur der zweite verschwindet.

    Ich habe die Buttons auf verschiedene Art und Weise verschwinden lassen, u. a. auch:

    Quellcode

    1. [buttonForExtra setHidden:TRUE];
    2. [self.buttonForExtra2 setHidden:TRUE];


    Und nehmen wir an, ich ändere etwas im Frame, also beispielsweise die X-Koordinate, weise anschließend das Frame erneut dem Button zu, so springt mein Button2 zu der neuen Stelle, mein Button(1) wird an dieser neuen Stelle einfach nochmal neu erzeugt, so dass ich diesen zweimal habe.

    Irgendwas stimmt da nicht! Wieso kann ich mich diesen Objekten, die ich im xCode erstelle nicht genauso umgehen, wie mit denen aus dem Interface Builder? Oder was muss ich einstellen, damit das so ist?

    Vielen Dank!
  • macmoonshine schrieb:



    Über den Alphawert lässt sich das Ganze auch noch schön animieren:

    Quellcode

    1. [UIView animateWithDuration:0.75 animations:^{
    2. buttonForExtra.alpha = 0.0;
    3. self.buttonForExtra2.alpha = 0.0;
    4. }];



    sieht allerdings viel schöner aus, wie meine abgehakte Variante, aber leider funktioniert auch das nur für meinen Button2. :/

    Vielleicht hab ich was falsch gemacht, aber es kann doch nicht so schwer sein, einen Button nach bspw. 5 sek zu erstellen und nach 10 sek wieder verschwinden zu lassen?! *grml*
  • danke! :)

    Noch eine einfache Frage (ich hab gerade keine Geduld, es selbst zu suchen):

    Wenn ich das Deklarieren des Buttons nun aus der Methode rausnehme und beispielsweise in die Methode setze, die mein Video startet, wie wird dieser Button denn "public" gemacht, damit ich ihn in anderen Methoden verwenden kann?

    Mir sagt er sonst in der anderen Methode natürlich "buttonForExtra undeclared"!

    Vielen Dank!

    Dann verschone ich euch erstmal von mir! :D