我的初始视图控制器设置了UINavigationController
,允许用户输入值。它还有一个自定义UILabel作为titleView
,这样我就可以显示一个带有绿色文本的完全“扁平”导航栏。
然后,当他们按下UIButton
时,它会将新视图推送到堆栈,这显然会消除带有我的自定义titleView的UINavigationItem
。
我的问题是:如何继续可靠地使用导航栏titleView
的自定义视图?
我显然尝试过使用“delegate
”方法(willPush
和didPush
),但第一种方法显然还没有topItem
,所以它最终将我的UILabel添加到当前navigationItem
,didPush
视图控制器动画显示与正在应用的新titleView
标签之间存在明显的延迟。
我已经尝试过google了很多,但似乎没有什么工作正常,我不想在推新视图控制器时丢失动画。
有什么想法吗?
编辑:在下面发布了我的代码的粗略轮廓示例,它不是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 :(得分:0)
这是因为您要设置titleView
的{{1}}。这只会暂时更改当前的标题视图。
要正确更改标题视图,请使用UINavigationController
的{{1}}属性。导航控制器框架将根据您当前的导航项目设置titleView
的视图,并确保动画流畅。