UINavigationController и titleView - PullRequest
       22

UINavigationController и titleView

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

Мое приложение помещается внутри UINavigationController. Просто я настроил MyUIViewController как rootViewController из navigationController, а затем настроил customTitleView для navigationItem из myViewController внутри viewDidLoad.

Теперь, когда я нажимаю newViewController, я ожидаю увидеть предыдущий customTitleView (как описано в справке Apple NavigationController), но это не так.

Что не так?

Небольшая часть кода ниже и справочник Apple UINavigationController

"Если новый контроллер представления верхнего уровня имеет настраиваемое представление заголовка, панель навигации отображает это представление вместо представления заголовка по умолчанию. Чтобы указать настраиваемое представление заголовка, установите свойство titleView элемента навигации контроллера представления. «

- (void)viewDidLoad {
    [super viewDidLoad];

    [self.navigationItem setTitleView:customTitleView];
}

Может быть, «вид заголовка по умолчанию» означает «ничего»? Я интерпретировал это как предыдущий titleView.

EDIT

Я пытаюсь обойти, но у меня есть некоторые другие проблемы. Обходной путь:

В каждом ViewController, который я вставляю в NavigationController, я настраиваю в viewDid, загружаем titleView, получая его от rootViewController

UiView *originalContainer = [[[self.navigationController.viewControllers objectAtIndex:0] navigationItem] titleView]

Я создаю newTitleView и помещаю его в originalContainer.subviews (UIButton), потому что мне нужно от него действие Target.

Все отлично работает для первого выдвинутого контроллера, но если я помещаю в стек другой viewController (второй выдвинутый), я теряю все ссылки на navigationController. Все переменные экземпляра равны нулю.

Эти значения получены внутри viewDidLoad

firstViewControllerPush.navigationController = (UINavigationController *) 0x6693da0 firstViewControllerPush.parentViewController = (UINavigationController *) 0x6693da0

secondViewControllerPushFromFirstViewControllerPressed.navigationController = 0x0 secondViewControllerPushFromFirstViewControllerPush.parentViewController = 0x0

Похоже, что второй ViewControllerPressed нигде не живет !!

Как это возможно?

Я дважды проверил, правильно ли я нажимаю viewController вместо того, чтобы представлять его модально

Из-за этой проблемы я не могу правильно настроить newTitleView для secondViewControllerPressed.

1 Ответ

2 голосов
/ 21 ноября 2011

Это хак пополам, но я чувствую, что он дает вам немного больше контроля в viewController, в котором вы работаете. Итак, ниже приведен небольшой метод, который я настроил, а затем я просто вызываю его в viewDidLoad - [self setUpNavBar] ;

И использование [UIButton buttonWithType: 101] совершенно нормально, так как прошло проверку Apple.

- (void) setUpNavBar
{
    [self.navigationController setNavigationBarHidden: NO animated:YES];

    self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
    self.title = @"Settings";


    UIButton* backButton = [UIButton buttonWithType:101]; // left-pointing shape
    [backButton addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside];
    [backButton setTitle:@"Back" forState:UIControlStateNormal];

    UIBarButtonItem* backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
    self.navigationItem.leftBarButtonItem = backItem;
    [backItem release];

    self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Logout" 
                                                                            style:UIBarButtonItemStylePlain target:self 
                                                                            action:@selector(logoutAction)] autorelease];                     

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...