Mehrere Etiketten in der Navigationsleiste

stimmen
3

Ich möchte eine ähnliche Ansicht wie die „Now Playing“ -Seite auf dem iPhone erstellen und haben drei Textzeilen in der Navigationsleiste.

Der einzige Weg, die ich finden konnte, dies zu tun war:

UINavigationBar *bar = [self.navigationController navigationBar];   
label = [[UILabel alloc] initWithFrame:CGRectMake(60, 2, 200, 14)];
label.tag = SONG_TAG;
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont boldSystemFontOfSize:14];
label.adjustsFontSizeToFitWidth = NO;
label.textAlignment = UITextAlignmentCenter;
label.textColor = [UIColor whiteColor];
label.highlightedTextColor = [UIColor blackColor];
[bar addSubview:label];
[label release];

//Create album label
label = [[UILabel alloc] initWithFrame:CGRectMake(60, 17, 200, 12)];
label.tag = ALBUM_TAG;
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont systemFontOfSize:12];
label.adjustsFontSizeToFitWidth = NO;
label.textAlignment = UITextAlignmentCenter;
label.highlightedTextColor = [UIColor blackColor];
label.textColor = HEXCOLOR(0xA5A5A5ff);
[bar addSubview:label];
[label release];

//Create artist label
label = [[UILabel alloc] initWithFrame:CGRectMake(60, 30, 200, 12)];
label.tag = ARTIST_TAG;
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont systemFontOfSize:12];
label.adjustsFontSizeToFitWidth = NO;
label.textAlignment = UITextAlignmentCenter;
label.highlightedTextColor = [UIColor blackColor];
label.textColor = HEXCOLOR(0xA5A5A5ff);
[bar addSubview:label];
[label release];

Das Problem dabei ist, ich sie, wenn die Ansicht, die Änderungen zu entfernen haben. Also, in -viewWillDisappear ich habe:

UILabel *label;
label = (UILabel *)[self.navigationController.navigationBar viewWithTag:SONG_TAG];
[label removeFromSuperview];
label = (UILabel *)[self.navigationController.navigationBar viewWithTag:ALBUM_TAG];
[label removeFromSuperview];
label = (UILabel *)[self.navigationController.navigationBar viewWithTag:ARTIST_TAG];
[label removeFromSuperview];

Ich denke, die Art und Weise, dies zu tun, ist eine benutzerdefinierte Ansicht machen, die die drei Etiketten in ihm, und fügen Sie diese in die Titelansicht. (Hier ist der Haken - Sie nur 1 Etikett oder im Hinblick auf die Titelansicht Fleck auf der Navigationsleiste hinzufügen)

self.navigationItem.titleView = newViewIMadeWithThreeLabels
Veröffentlicht am 09/12/2008 um 22:57
quelle vom benutzer
In anderen Sprachen...                            


7 antworten

stimmen
4

UIView Code unten funktioniert ok für mich, Sie hatten das gleiche Label-Tag zweimal verwendet wird, könnte Ihr Absturz Grund gewesen.

UIView *btn = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 60)];

UILabel *label;
label = [[UILabel alloc] initWithFrame:CGRectMake(0, 10, 200, 16)];
label.tag = 1;
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont boldSystemFontOfSize:16];
label.adjustsFontSizeToFitWidth = NO;
label.textAlignment = UITextAlignmentCenter;
label.textColor = [UIColor blackColor];
label.text = @"first line";
label.highlightedTextColor = [UIColor blackColor];
[btn addSubview:label];
[label release];

label = [[UILabel alloc] initWithFrame:CGRectMake(0, 30, 200, 16)];
label.tag = 2;
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont boldSystemFontOfSize:16];
label.adjustsFontSizeToFitWidth = NO;
label.textAlignment = UITextAlignmentCenter;
label.textColor = [UIColor blackColor];
label.text = @"second line";
label.highlightedTextColor = [UIColor blackColor];
[btn addSubview:label];
[label release];

self.navigationItem.titleView = btn;
Beantwortet am 20/12/2009 um 22:37
quelle vom benutzer

stimmen
2

Sie könnten versuchen, eine UIViewController mit Erstellen von Etiketten richtig positioniert, und dann instanziiert, wie UIViewControllerSubclass * sub = [[UIViewControllerSubclass alloc] init];

Innerhalb der UIViewController Unterklasse, würden Sie haben Ihre Ansicht nach in der Loadview Delegatmethode aufzubauen und befestigen jede Ansicht des Etiketts der Ansicht des View-Controller wie [[self Ansicht] addSubview: label];

Dann legen seine Ansicht wie folgt aus:

self.navigationItem.titleView = sub.view;

Das könnte funktionieren.

Beantwortet am 09/12/2008 um 23:10
quelle vom benutzer

stimmen
1

Heute wollte ich durch das gleiche Problem, und ich habe es auf diese Weise.

  1. Ich habe eine UIView der Größe 320 * 44 an der Stelle 0,0 - Sie eine andere Ansicht Größe auf Ihrer Anforderung basiert haben.

  2. Erstellen Sie eine IBOutlet für die benutzerdefinierte Ansicht namens navigationBarTitleView - machen notwendige Verbindungen mit Ihrer Sicht

  3. In Subview navgiationBar mit dem folgenden Code innerhalb innen viewWillAppear: OR viewDidAppear:

    [[[Self Navigation] navigationbar] addSubview: navigationBarTitleView];

  4. Wenn Sie diese Ansicht auf der Navigation schieben, entfernen Sie die navigationBarTitleView aus dem Superview.

    [NavigationBarTitleView removeFromSuperview];

Beantwortet am 23/10/2010 um 22:29
quelle vom benutzer

stimmen
1
UINavigationBar *bar = [self.navigationController navigationBar];
CGFloat navBarHeight = 70.0f;    
CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, navBarHeight);
[bar setFrame:frame];
UILabel *label;
label = [[UILabel alloc] initWithFrame:CGRectMake(0, 10, 320, 10)];
label.tag = 1;
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont boldSystemFontOfSize:12];
label.adjustsFontSizeToFitWidth = NO;
label.textAlignment = UITextAlignmentCenter;
label.textColor = [UIColor blackColor];
label.text = @"Set the details for this event.";
label.highlightedTextColor = [UIColor blackColor];
[bar addSubview:label];
[label release];
[bar release];
Beantwortet am 14/05/2010 um 13:13
quelle vom benutzer

stimmen
1

Ihr späterer Vorschlag in der Post ist richtig. Erstellen Sie eine UIView, die Ihre 3 Etiketten enthält und setzen Sie ihn als Titleview. Bitte versuchen Sie nicht Subviews direkt an den UINavigationBar hinzuzufügen.

Beantwortet am 10/12/2008 um 15:34
quelle vom benutzer

stimmen
0

Eine ordentliche Art und Weise ist nur zu enumIhrem Tag:

enum {
  SONG_TAG,
  ALBUM_TAG,
  ARTIST_TAG
};

Der Code sollte dann funktionieren.

Beantwortet am 25/09/2010 um 19:07
quelle vom benutzer

stimmen
0

Ich habe versucht, eine ganze Ansicht Hinzufügen .. jedoch die Anwendung abstürzt gehalten, wenn ich ein Subview hinzugefügt (wie ein Label), um es in der Loadview delegiert. Ich bin gar nicht so groß zu debuggen kompletten abstürzt, so fand ich über eine Taste viel einfacher war. Ich habe keine Nebenwirkungen noch nicht gefunden ...

UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn.frame = CGRectMake(0, 0, 320, 60);

UILabel *label;
label = [[UILabel alloc] initWithFrame:CGRectMake(0, 10, 200, 16)];
label.tag = SONG_TAG;
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont boldSystemFontOfSize:16];
label.adjustsFontSizeToFitWidth = NO;
label.textAlignment = UITextAlignmentCenter;
label.textColor = [UIColor blackColor];
label.text = @"first line";
label.highlightedTextColor = [UIColor blackColor];
[btn addSubview:label];
[label release];

label = [[UILabel alloc] initWithFrame:CGRectMake(0, 30, 200, 16)];
label.tag = SONG_TAG;
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont boldSystemFontOfSize:16];
label.adjustsFontSizeToFitWidth = NO;
label.textAlignment = UITextAlignmentCenter;
label.textColor = [UIColor blackColor];
label.text = @"second line";
label.highlightedTextColor = [UIColor blackColor];
[btn addSubview:label];
[label release];

self.navigationItem.titleView = btn;
Beantwortet am 15/12/2008 um 23:46
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more