0

我的应用程序适合UINavigationController. 只是我设置了一个MyUIViewControlleras rootViewControllerof ,navigationController然后我设置了一个customTitleViewfor the navigationItemof myViewControllerinside viewDidLoad

现在,当我按下 a 时,newViewController我希望看到以前的内容customTitleView(如 Apple NavigationController 参考所述),但事实并非如此。

怎么了?

下面的一小部分代码和 Apple UINavigationController 参考

“如果新的顶级视图控制器具有自定义标题视图,导航栏会显示该视图以代替默认标题视图。要指定自定义标题视图,请设置视图控制器导航项的 titleView 属性。”

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self.navigationItem setTitleView:customTitleView];
}

也许“默认标题视图”意味着“什么都没有”?我把它解释为之前的titleView。

编辑

我正在尝试解决方法,但我还有其他一些问题。解决方法是:

在我推入 NavigationController 的每个 ViewController 中,我在 viewDidLoad 中设置了 titleView 从 rootViewController 获取它

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

我创建了一个 newTitleView 并将其放入 originalContainer.subviews (UIButton) 中,因为我需要其中的 Target 操作。

对于第一个推送的控制器来说,一切都很好,但是如果我在堆栈中推送另一个 viewController(第二个推送),我会丢失对 navigationController 的所有引用。每个实例变量都是零。

这些值是在 viewDidLoad 中获取的

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

secondViewControllerPushedFromFirstViewControllerPushed.navigationController = 0x0 secondViewControllerPushedFromFirstViewControllerPushed.parentViewController = 0x0

看来 secondViewControllerPushed 无处可去!

怎么可能?

我仔细检查了我是否正确推送了 viewController 而不是模态显示它

由于这个问题,我无法为 secondViewControllerPushed 正确设置 newTitleView。

4

1 回答 1

2

这是一半的技巧,但我觉得它可以让您在正在使用的 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];                     

}
于 2011-11-21T17:26:21.097 回答