Несколько ярлыков на панели навигации - PullRequest
3 голосов
/ 10 декабря 2008

Я хотел бы создать представление, похожее на страницу «Сейчас исполняется» на iPhone, и иметь 3 строки текста на панели навигации.

Единственный способ найти это:

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];

Проблема в том, что я должен удалить их при изменении вида. Итак, в -виде исчезновения у меня есть:

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];

Я думаю, что способ сделать это состоит в том, чтобы создать собственное представление, содержащее 3 метки, и добавить его в представление заголовка. (в этом и заключается подвох - вы можете добавить только 1 метку или вид в область просмотра заголовка на панели навигации)

self.navigationItem.titleView = newViewIMadeWithThreeLabels

Ответы [ 7 ]

4 голосов
/ 21 декабря 2009

Код UIView, приведенный ниже, работает нормально для меня, у вас был один и тот же тег метки, который использовался дважды, возможно, это было причиной сбоя.

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;
2 голосов
/ 10 декабря 2008

Вы можете попробовать создать UIViewController с правильно расположенными метками, а затем создать его экземпляр, например UIViewControllerSubclass * sub = [[UIViewControllerSubclass alloc] init];

Внутри подкласса UIViewController вам потребуется создать представление в методе делегата loadView и прикрепить представление каждой метки к представлению контроллера представления, например [[self view] addSubview: label];

Затем прикрепите свой вид так:

self.navigationItem.titleView = sub.view;

Это может сработать.

1 голос
/ 24 октября 2010

Сегодня я столкнулся с той же проблемой и сделал это так.

  1. Я создал UIView размером 320 * 44 в местоположении 0,0 - вы можете иметь другой размер представления в зависимости от ваших требований.

  2. Создайте IBOutlet для этого пользовательского представления с именем navigationBarTitleView - установите необходимые соединения с вашим представлением

  3. Добавление подпредставления в панель навигации со следующим кодом внутри viewWillAppear: ИЛИ viewDidAppear:

    [[[self navigationController] navigationBar] addSubview: navigationBarTitleView];

  4. Когда вы нажимаете это представление на навигационном контроллере, удаляйте навигацию BarTitleView из суперпредставления.

    [navigationBarTitleView removeFromSuperview];

1 голос
/ 14 мая 2010
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];
1 голос
/ 10 декабря 2008

Ваше последующее предложение в посте верное. Создайте UIView, который содержит ваши 3 метки и установите его как titleView. Пожалуйста, НЕ пытайтесь добавлять подпредставления непосредственно в UINavigationBar.

0 голосов
/ 25 сентября 2010

Более аккуратный способ - просто enum ваш тег:

enum {
  SONG_TAG,
  ALBUM_TAG,
  ARTIST_TAG
};

Тогда ваш код должен работать.

0 голосов
/ 16 декабря 2008

Я пытался добавить весь вид ... однако приложение продолжало падать, когда я добавлял подпредставление (например, метку) к нему в делегате loadView. Я не настолько хорош в отладке полных сбоев, поэтому я обнаружил, что использовать кнопку гораздо проще. Я еще не нашел побочных эффектов ...

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...