Frage

In dem Root-Tabelle View-Controller füge ich eine Subview, die ein Bild enthält:

[self.navigationController.navigationBar addSubview:imageView];

Dann in einer untergeordneten Tabelle View-Controller, die ich auf den Stapel schiebe ich ein Recht UIBarButtonItem gesetzt:

UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Right"  style:UIBarButtonItemStylePlain target:self action:@selector(rightAction:)];
self.navigationItem.rightBarButtonItem = rightButton;
[rightButton release];

Ich kann nicht verstehen, warum die Schaltfläche nicht in der Navigationsleiste angezeigt wird. Wenn ich (das Leerzeichen) tippen Sie auf die rightAction. Methode wird aufgerufen, so dass die Taste dort „ist“, erwarten, dass es nicht angezeigt wird

Ich habe versucht, den Imageview subview senden in der Navigationsleiste zu sichern, aber ohne Erfolg. Es Art macht Sinn, da die Schaltfläche gehört eigentlich zum UINavigationItem sowieso ...

Weiß jemand, wie ich es richtig, dass die Tastenanzeige machen?

Update: die Zurück-Taste korrekt anzeigt, aber es wird durch das System aber ...

hinzugefügt
War es hilfreich?

Lösung

Eine bessere Möglichkeit, ein Bild zu einem UINavigationBar hinzuzufügen, ist es, Unterklasse oder eine Kategorie zu machen und die drawRect Methode überschreiben:

//                                  #Lighter r,g,b,a            #Darker r,g,b,a
#define MAIN_COLOR_COMPONENTS       { 0.153, 0.306, 0.553, 1.0, 0.122, 0.247, 0.482, 1.0 }
#define LIGHT_COLOR_COMPONENTS      { 0.478, 0.573, 0.725, 1.0, 0.216, 0.357, 0.584, 1.0 }

@implementation UINavigationBar (UINavigationBarCategory)

- (void)drawRect:(CGRect)rect {
    if (imageReady) {
        UIImage *img = [UIImage imageNamed: @"navigation_background.png"];
        [img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
    } else {
        // Render yourself instead.
        // You will need to adjust the MAIN_COLOR_COMPONENTS and LIGHT_COLOR_COMPONENTS to match your app

       // emulate the tint colored bar
       CGContextRef context = UIGraphicsGetCurrentContext();
       CGFloat locations[2] = { 0.0, 1.0 };
       CGColorSpaceRef myColorspace = CGColorSpaceCreateDeviceRGB();

       CGFloat topComponents[8] = LIGHT_COLOR_COMPONENTS;
       CGGradientRef topGradient = CGGradientCreateWithColorComponents(myColorspace, topComponents, locations, 2);
       CGContextDrawLinearGradient(context, topGradient, CGPointMake(0, 0), CGPointMake(0,self.frame.size.height/2), 0);
       CGGradientRelease(topGradient);

       CGFloat botComponents[8] = MAIN_COLOR_COMPONENTS;
       CGGradientRef botGradient = CGGradientCreateWithColorComponents(myColorspace, botComponents, locations, 2);
       CGContextDrawLinearGradient(context, botGradient,
       CGPointMake(0,self.frame.size.height/2), CGPointMake(0, self.frame.size.height), 0);
       CGGradientRelease(botGradient);

       CGColorSpaceRelease(myColorspace);


       // top Line
       CGContextSetRGBStrokeColor(context, 1, 1, 1, 1.0);
       CGContextMoveToPoint(context, 0, 0);
       CGContextAddLineToPoint(context, self.frame.size.width, 0);
       CGContextStrokePath(context);

       // bottom line
       CGContextSetRGBStrokeColor(context, 0, 0, 0, 1.0);
       CGContextMoveToPoint(context, 0, self.frame.size.height);
       CGContextAddLineToPoint(context, self.frame.size.width, self.frame.size.height);
       CGContextStrokePath(context);
    }
}

@end

Doing es auf diese Art und Weise wird dazu führen, dass Tasten richtig zeigen und weniger „Hacky“.

Andere Tipps

Ich glaube, Sie den Navigationspunkt Titel im Hinblick auf Ihre Imageview setzen soll.

self.navigationItem.titleView = imageView;

Ich denke, die UINavigationBar zeigt die UINavigationItems in einem Subview, und Sie fügen Ihre UIImageView oben auf dieser subview.

In einem meiner Ansichten ich ein Etikett Anzeige und ein Bild daneben. Ich glaube, ich nur das Etikett und die Bildansicht zu einer Ansicht hinzugefügt, die ich dann für die Titleview verwendet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top