【发布时间】:2011-11-21 15:45:20
【问题描述】:
我的应用程序适合 UINavigationController。
只需我将MyUIViewController 设置为navigationController 的rootViewController,然后在viewDidLoad 内部为myViewController 的navigationItem 设置customTitleView。
现在,当我推送 newViewController 时,我希望看到以前的 customTitleView(如 Apple NavigationController 参考所述),但它没有。
怎么了?
下面的一小部分代码和 Apple UINavigationController 参考
“如果新的顶级视图控制器具有自定义标题视图,导航栏会显示该视图以代替默认标题视图。要指定自定义标题视图,请设置视图控制器导航项的 titleView 属性。 "
- (void)viewDidLoad {
[super viewDidLoad];
[self.navigationItem setTitleView:customTitleView];
}
也许“默认标题视图”意味着“什么都没有”?我把它解释为之前的titleView。
编辑
我正在尝试解决方法,但我还有一些其他问题。 解决方法是:
在我在 viewDidLoad 中设置的 NavigationController 中推送的每个 ViewController 中,titleView 从 rootViewController 获取它
UiView *originalContainer = [[[self.navigationController.viewControllers objectAtIndex:0] navigationItem] titleView]
我创建了一个 newTitleView 并将其放入 originalContainer.subviews (UIButton) 中,因为我需要它的 Target 操作。
对于第一个推送的控制器来说一切都很好,但是如果我在堆栈中推送另一个 viewController(第二个推送)我会丢失对导航控制器的所有引用。每个实例变量都是 nil。
这些值是在 viewDidLoad 中获取的
firstViewControllerPushed.navigationController = (UINavigationController*)0x6693da0 firstViewControllerPushed.parentViewController = (UINavigationController*)0x6693da0
secondViewControllerPushedFromFirstViewControllerPushed.navigationController = 0x0 secondViewControllerPushedFromFirstViewControllerPushed.parentViewController = 0x0
似乎 secondViewControllerPushed 无处可去!!
这怎么可能?
我仔细检查了我是否正确推送了 viewController 而不是模态显示它
由于这个问题,我无法为 secondViewControllerPushed 正确设置 newTitleView。
【问题讨论】:
-
我已经删除了我的答案,因为它显然是错误的;对不起。
标签: iphone ios uikit navigationcontroller titleview