在iOS 5中使用UINavigationController设置leftBarButtonItems

时间:2012-01-26 23:26:48

标签: iphone uinavigationcontroller

我在文档中看到,现在您可以在UINavigationController中为leftBarButtonItems和rightBarButtonItems创建一个项目数组,而不必创建UIToolBar并将其设置为按钮。我基本上想在navigationController的“后退”按钮旁边的左侧有一个“Home”按钮。所以它看起来像:

BackButtonFromNavigationController HomeBarButtonItem

我不确定在创建HomeButton后如何将navigationBar的backButton放入我的数组中。我尝试过这个,但我只看到了navigationController的backBarButton:

if ([self.navigationItem respondsToSelector:@selector(setLeftBarButtonItems:)]) {
    UIBarButtonItem *hButton = [self createHomeButton];
    self.navigationController.navigationItem.leftBarButtonItems = [NSArray arrayWithObjects:self.navigationItem.backBarButtonItem, hButton, nil];
}

根据smparkes回复编辑:

if ([self.navigationItem respondsToSelector:@selector(leftItemsSupplementBackButton)]) {
    self.navigationItem.leftItemsSupplementBackButton = YES;
    self.navigationItem.leftBarButtonItem = homeBBI;
}

我知道homeBBI是在我的UIToolBar中正确创建的,因为它在iOS 5之前是rightBarButtonItem。现在我只是想把它移到左边,我用同样的按钮看它是否会起作用但是它似乎还没有工作......

2 个答案:

答案 0 :(得分:8)

不要将后退按钮放在数组中。使用leftItemsSupplementBackButton使按钮数组添加到而不是替换后退按钮。一旦你完成了这一点,听起来你甚至不需要一个阵列。

我认为你正在获得你所看到的行为,因为你的按钮数组是空的。您正在添加可能为self.navigationItem.backBarButtonItem的{​​{1}}。您希望控制器中的后退按钮在导航堆栈中更深一些,而不是当前控制器的后退按钮。

答案 1 :(得分:0)

我遇到了同样的问题。在我的情况下隐藏其他按钮的原因是我一直在使用自定义标题视图。正如文档所述:

  

如果没有足够的空间显示数组中的所有项目,则不会显示与标题视图(如果存在)或栏右侧按钮重叠的项目。

更改自定义标题视图的大小确实解决了我的问题。也许这个暗示会帮助别人。