У меня есть UINavigationController
, все настроены с моим начальным контроллером представления, что позволяет пользователю вводить значение. Он также имеет пользовательский UILabel как titleView
, так что я могу отображать полностью «плоскую» навигационную панель с зеленым текстом.UINavigationController custom LabelView при нажатии нового представления Контроллер в стек
Затем, когда они нажимают UIButton
, он выталкивает новый вид в стек, который, очевидно, уничтожает UINavigationItem
, который несет мой пользовательский заголовок.
Мой вопрос: как я могу использовать настраиваемое представление для навигационной панели titleView
?
Я, очевидно, пытался использовать класс delegate
методы (willPush
и didPush
), но первое, очевидно, не имеет topItem
еще, так что в конечном итоге добавлять мой UILabel к текущему navigationItem
и didPush
есть видимая задержка между анимацией контроллера просмотра и новой меткой titleView
.
Я много пробовал и много гугл, но ничего похожего не работает, я бы предпочел не терять анимацию при нажатии новых контроллеров вида.
Любые идеи?
РЕДАКТИРОВАТЬ: Приведенный пример моего кода ниже, он не идеален на 100%, потому что это обзор того, что я делаю, а не пасту непосредственно из XCode.
// This code lives in the app delegate
// Set up the root view controller that needs to be contained
UIViewController *myFrontView = [[MYFrontViewController alloc] init];
// Set up the uinavigationcontroller
UINavigationController *myNavController = [[MYNavigationController alloc] initWithRootViewController: myFrontView];
// Customise the initial UINavbar titleView:
UILabel *myLabel = [[UILabel alloc] initWithText:@"My custom text"];
// Change the text Color.
myLabel.textColor = [UIColor redColor];
// Set my new label as the custom titleview.
[myNavController.navigationBar.topItem setTitleView: myLabel];
// Boilerplate code to make myNavController the rootViewController of the window etc.
Я устанавливаю titleView в файле navigationBar.topItem, который является экземпляром 'UINavigationItem', не так ли? –
Когда вы это делаете? В большинстве случаев лучшим способом было бы использовать выход titleView в раскадровке, если это возможно. – Krumelur
Я строю большинство своих представлений в коде и устанавливаю titleView сразу после 'alloc' в контроллере представления с помощью метода initWithRootViewController:. –