Пользовательский UIToolbar в rightBarButtonItem UINavigationController исчезает при возврате к просмотру - PullRequest
0 голосов
/ 19 ноября 2010

РЕДАКТИРОВАТЬ 2: Я сейчас исправил эту проблему. Я настраивал пользовательское фоновое изображение для моего UINavigationBar следующим образом:

UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 44.0)];
[imgView setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"NavigationBarBackground" ofType:@"png"]]];
[navBar addSubview:imgView];
[navBar sendSubviewToBack:imgView];
[imgView release];

Это было бы хорошо для первого контроллера представления в стеке контроллера представления UINavigationController, но любые вспомогательные представления заставляли этот код перезапускаться и помещать пользовательский фон вперед.

Исправление: Просто удалите весь свой код для пользовательского фона на контроллере навигации, затем РАСШИРИТЕ класс UINavigationBar следующим образом:

Создайте новый файл .h / .m с именем UINavigationBar + CustomImage. Установите код .h на:

@interface UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect;
@end

И .m до:

#import "UINavigationBar+CustomImage.h"

@implementation UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect {
    UIImage *image = [UIImage imageNamed: @"NavigationBarBackground.png"];
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end

И вуаля! Теперь все отлично работает.

--- КОНЕЦ РЕДАКТИРОВАНИЯ 2 ---

У меня есть UINavigationController, который детализирует примерно так:

HOMEPAGE > DETAIL PAGE > MAP VIEW

DETAIL PAGE добавляет пользовательский UIToolbar (с тремя кнопками) к rightBarButtonItem в viewDidLoad следующим образом:

UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 1.0, 157.0, 44.1)];
[imgView setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"NavigationBarBackground" ofType:@"png"]]];
[tools addSubview:imgView];
[tools sendSubviewToBack:imgView];
[tools setTintColor:[UIColor colorWithRed:127/255.0 green:184/255.0 blue:72/255.0 alpha:1.0]];
[imgView release];

NSMutableArray* buttons = [[NSMutableArray alloc] initWithCapacity:3];

UIBarButtonItem* bi = [[UIBarButtonItem alloc] initWithTitle:@"Filter" style:UIBarButtonItemStyleBordered target:self action:NULL];

[buttons addObject:bi];
[bi release];

bi = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Map.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(showMap:)];

[buttons addObject:bi];
[bi release];

bi = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Favourite.png"] style:UIBarButtonItemStyleBordered target:self action:NULL];
[buttons addObject:bi];
[bi release];

[tools setItems:buttons animated:NO];

[buttons release];

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:tools];

Это прекрасно отображается при просмотре страницы DETAIL VIEW, и когда я перехожу к MAP VIEW, пользовательская панель UIToolbar исчезает (как и ожидалось), однако при возврате к DETAIL VIEW пользовательская панель UIToolbar больше не отображается. Тем не менее, он есть, поскольку я все еще могу коснуться области, где должна быть кнопка «Карта», и она возвращает меня к просмотру карты.

Не могли бы вы узнать, как можно снова отобразить эту панель UIToolbar при возврате к представлению DETAIL?

Я попытался перестроить пользовательский UIToolbar в viewWillAppear, который имеет те же эффекты, что и выше.

EDIT - Это работает, если я поместил код, который создает пользовательский UIToolbar, в метод viewDidAppear. Мне не нравится это решение, хотя, когда представление скользит назад, , а затем появляется пользовательский rightBarButtonItem. Это связано с тем, что навигационный контроллер не инициализируется перед отображением страницы?

Ответы [ 2 ]

1 голос
/ 19 ноября 2010

Если это работает в viewDidAppear, вы можете попробовать viewWillAppear.В общем, я никогда не видел UIToolbar, установленный как UIBarButtonItem, поэтому я не обязательно ожидал стандартного поведения.Дайте мне знать, как это происходит.

0 голосов
/ 21 ноября 2010

API Apple UI часто терпят неудачу необычным образом, когда вы пытаетесь сделать что-то даже немного необычное (даже вещи, которые должны работать), и попытка вставить UIToolbar в rightBarButtonItem определенно подпадает под мое определение " необычный».

Что вам действительно следует делать, так это скрывать панель навигации и добавлять панель UIToolbar в качестве подпредставления основного представления вашего контроллера представления. В качестве альтернативы вы можете полностью отказаться от UIToolbar и реализовать кнопки самостоятельно в пользовательском представлении.

...