以编程方式在导航栏中创建左尖UIBarButton

时间:2012-12-01 04:44:12

标签: cocos2d-iphone navigation uinavigationbar uibarbuttonitem uinavigationitem

我正在尝试使用设置页面创建一个应用程序,就像IOS的原生设置应用程序一样。但是我无法找到如何创建左尖的UIBarButton。基本上我想在导航栏顶部有一个左指针按钮,你可以设置为调用一个函数。我正在使用引擎cocos2d,如果这有帮助的话。我正在以编程方式创建整个应用程序。

这是我创建UINavigationBar的代码......

UINavigationBar *naviBarObj = [[[UINavigationBar alloc] initWithFrame:CGRectMake(0, 20, 320, 44)] autorelease];
[[[CCDirector sharedDirector] openGLView] addSubview:naviBarObj];
[naviBarObj release];
UINavigationItem *item = [[[UINavigationItem alloc] initWithTitle:@"Title"] autorelease];
UIBarButtonItem *back = [[[UIBarButtonItem alloc] initWithTitle:@"Back"
                                                         style:UIBarButtonItemStyleBordered
                                                        target:self
                                                        action:@selector(back)] autorelease];
item.leftBarButtonItem = back;
[naviBarObj setItems:[NSArray arrayWithObjects:item, nil] animated:YES];

虽然这会创建一个方形后退按钮。

我的目标是创造这样的东西

Left Pointed Button

我知道UINavigationItem

UINavigationItem *back2 = [[[UINavigationItem alloc] initWithTitle:@"Settings"] autorelease];

[naviBarObj setItems:[NSArray arrayWithObjects:back,item, nil] animated:YES];

将创建该效果,但不幸的是我目前没有使用UINavigationController类。这一切都是在CCLayer中完成的。

谢谢!!

1 个答案:

答案 0 :(得分:2)

一种方法是使用自定义背面图像,但这会很乏味。

另一种方式就像您在上一部分中提到的那样,创建另一个“虚拟”上一个导航项目,其标题设置为您想要在后退按钮上的文本,然后将这两个项目添加到UINavigationBar

UINavigationItem *item = [[[UINavigationItem alloc] initWithTitle:@"Title"] autorelease];    
UINavigationItem *back2 = [[[UINavigationItem alloc] initWithTitle:@"Settings"] autorelease];

[naviBarObj setItems:[NSArray arrayWithObjects:back2,item, nil] animated:YES];

但是我不认为你需要一个UINavigationController来实现这些。为了处理你的后退按钮事件,我想你可以尝试让你的CCLayer成为UINavigationBar的代表,即。 UINavigationBarDelegate:

@interface MyLayer : CCLayer <UINavigationBarDelegate> {
}

然后将UINavigationBar的委托设置为该层:

naviBarObj.delegate = self;

最后实现didPopItem以在单击按钮时收到事件通知:

- (void) navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item
{
    [self back]; // or whatever 
}

让我知道这是否有效。