Normales UIBarButtonItem als backBarButtonItem

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

  • Normales UIBarButtonItem als backBarButtonItem

    Hallo Liebe Leute,

    ich habe mit folgendem Code ein UIBarButtonItem in meinem Controllern implementiert, der zurück zum vorherigen Controller führt.

    Quellcode

    1. self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Zurück" style:UIBarButtonItemStyleBordered target:self action:@selector(OnPushBack)];


    Bei Klick "rotiert" Der Controller und es wird der vorherige sichtbar. Es handelt sich also um KEINEN NavigationController, der hier verwendet werden könnte.

    Ich hätte nun aber gerne, wenigstens unter iOS 7 (wenn möglich auch für iOS 6) eine Lösung, die mir aus dem UIBarButtonItem trotzdem optisch ein BackBarButtonItem eines NavigationControllers "zaubert"... Gibts da Lösungen?

    Wenn ich

    Quellcode

    1. self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Zurück" style:UIBarButtonItemStyleBordered target:self action:@selector(OnPushBack)];
    versuche erscheint einfach gar nichts mehr oben links...

    Danke.
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io
  • Das backBarButtonItem musst Du innerhalb eines NavigationControllers in dem vorherigen ViewController setzen, damit es in dem nächsten ViewController als backBarButtonItem angezeigt wird. ;)

    Alternativ könntest Du ein UIBarButtonItem mit einem CustomView zu verwenden. Darin kannst Du dann z.B. ein UIButton mit passendem backgroundImage verwenden.
  • Die Version soll auch erst mal zu testzwecken dienen, da ich leider gerade bereits am Button scheiter.

    Quellcode

    1. NSString *imageName = SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0") ? @"SPUniversalBackBarButtonItem-image-ios7" : @"SPUniversalBackBarButtonItem-image";
    2. UIImage *buttonImage;
    3. if (!buttonImage) {
    4. buttonImage = [[UIImage imageNamed:imageName] stretchableImageWithLeftCapWidth:10 topCapHeight:30];
    5. }
    6. UIButton *backBarButtonItem = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 80, 25)];
    7. [backBarButtonItem setImage:buttonImage forState:UIControlStateNormal];
    8. [backBarButtonItem setTitle:@"Zurück" forState:UIControlStateNormal];
    9. [backBarButtonItem addTarget:self action:@selector(OnPushBack) forControlEvents:UIControlEventTouchUpInside];
    10. self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backBarButtonItem];
    Alles anzeigen


    Klappt für iOS 7 soweit sehr gut (siehe anhang.) Bei iOS 6 geht das allerdings leider voll in die Hose...

    Die beiden Bilder
    1. (>= iOS 7)
    2. (<= iOS 6)

    Screenshots:

    iOS 7:


    iOS 6:


    Ich hatte es auch über das Subclassen von UIControl versucht, leider werden hier meine Bilder nicht richtig geladen und ich bekomme einen Schwarzen kasten mit text.. Code im Spoiler.

    Spoiler anzeigen

    Quellcode

    1. ​- (void)drawRect:(CGRect)rect
    2. {
    3. NSString *imageName = SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0") ? @"SPUniversalBackBarButtonItem-image-ios7" : @"SPUniversalBackBarButtonItem-image";
    4. // Drawing code
    5. if (!buttonImage) {
    6. buttonImage = [[UIImage imageNamed:imageName] stretchableImageWithLeftCapWidth:20 topCapHeight:30];
    7. }
    8. UIFont *titleFont;
    9. if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
    10. titleFont = [UIFont systemFontOfSize:15.0];
    11. }
    12. else {
    13. titleFont = [UIFont boldSystemFontOfSize:15.0];
    14. }
    15. [self.titleColor set];
    16. const CGFloat w = self.bounds.size.width;
    17. const CGFloat h = self.bounds.size.height;
    18. [buttonImage drawInRect:CGRectMake(-buttonImage.size.width, 0, w + 2 * buttonImage.size.width, h)];
    19. const CGSize titleSize = [self.title sizeWithFont:titleFont];
    20. const CGFloat titleWidth = MIN(w, titleSize.width);
    21. CGRect titleFrame = CGRectMake(rint((w - titleWidth) / 2), rint((h - titleSize.height) / 2), titleWidth, titleSize.height);
    22. [self.title drawInRect:titleFrame withFont:titleFont lineBreakMode:NSLineBreakByTruncatingTail];
    23. }
    Alles anzeigen
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io
  • Du musst das Bild in dem UIButton natürlich als BackgroundImage verwenden, damit Du auch einen Text darauf platzieren kannst. ;)

    Unter iOS 7 funktioniert dies auch mit dem Image beim UIButton, da dieses nicht die komplette Größe des Buttons belegt und der Text neben dem Bild angezeigt wird.

    Alternativ kannst Du unter iOS 7 das Bild als Image und somit dem Text daneben und vor iOS 7 das Bild als BackgroundImage und somit dem Text darauf verwenden.
  • MCDan schrieb:

    Du musst das Bild in dem UIButton natürlich als BackgroundImage verwenden, damit Du auch einen Text darauf platzieren kannst. ;)

    Unter iOS 7 funktioniert dies auch mit dem Image beim UIButton, da dieses nicht die komplette Größe des Buttons belegt und der Text neben dem Bild angezeigt wird.

    Alternativ kannst Du unter iOS 7 das Bild als Image und somit dem Text daneben und vor iOS 7 das Bild als BackgroundImage und somit dem Text darauf verwenden.


    Hey McDan,

    Danke noch für die Antwort, habs aber doch noch mit der UIControl-Subclass hinbekommen. Die Bidler waren dort völlig falsch positioniert. :)

    Gruß,

    Daniel
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io