2013-06-26 3 views
0

У меня есть 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. 

ответ

0

Это потому, что вы устанавливаете titleView в UINavigationController. Это временно изменит текущий вид заголовка.

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

+0

Я устанавливаю titleView в файле navigationBar.topItem, который является экземпляром 'UINavigationItem', не так ли? –

+0

Когда вы это делаете? В большинстве случаев лучшим способом было бы использовать выход titleView в раскадровке, если это возможно. – Krumelur

+0

Я строю большинство своих представлений в коде и устанавливаю titleView сразу после 'alloc' в контроллере представления с помощью метода initWithRootViewController:. –