iPhone - настраиваемая панель UINavigation по всему стеку - PullRequest
0 голосов
/ 04 мая 2011

Я хочу установить изображение и метку в центре моего UINavigationBar, вдоль всего моего стека навигации.

В настоящее время я добавляю его в свой элемент навигации titleView.«Проблема» с этим подходом заключается в том, что мне нужно вызывать этот метод в viewDidLoad для каждого контроллера представления, который я помещаю в свой стек навигации.Другой путь - добавить UILable и UIImageView непосредственно в UINavigationBar, однако именно поэтому я должен сам рассчитать центр, и, кроме того, я прочитал, что это не рекомендуемый подход.Есть идеи как получить то, что я хочу?

Мой код:

    CGRect  navTitle = controller.navigationController.navigationBar.bounds;
    CGFloat aHeight = navTitle.size.height;

    UIView* container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 163, aHeight)];


    UIImage* statusImg = [UIUtils   getStatusImage]; 

    UIImageView *statusImage = [[UIImageView alloc] initWithFrame:CGRectMake(0,aHeight/2-statusImg.size.height/2, 33., 32.)];
    statusImage.autoresizingMask = UIViewAutoresizingNone;
    statusImage.image = statusImg;
    statusImage.backgroundColor = [UIColor clearColor];
    [statusImage setTag:1];
    [statusImage setHidden:NO];

initWithFrame:CGRectMake(statusImage.frame.origin.x + 33. + 3, 0, 130., navTitle.size.height)];

    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(statusImage.frame.origin.x + 33. + 3, 0, 130., navTitle.size.height)];
    titleLabel.textAlignment = UITextAlignmentLeft;
    titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
    titleLabel.textColor = [UIColor whiteColor];
    titleLabel.font = [UIFont boldSystemFontOfSize:20.];
    titleLabel.shadowOffset = CGSizeMake(1, -1);
    titleLabel.opaque = NO;
    titleLabel.backgroundColor = [UIColor clearColor];
    [titleLabel setTag:2];

    [container addSubview:statusImage];
    [container addSubview:titleLabel];
    controller.navigationItem.titleView = container;
[statusImage release];
[titleLabel release];
    [container release];

1 Ответ

0 голосов
/ 07 мая 2011

Найден хороший способ сделать это:

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

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated

Внутри этой функции получение viewController и управление его навигационным элементом сделает свое дело.

...