0

我正在尝试创建一个带有设置页面的应用程序,就像 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];

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

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

左指向按钮

我知道 UINavigationItem

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

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

会产生这种效果,但不幸的是我目前没有使用 UINavigationController 类。这一切都是在 CCLayer 中完成的。

谢谢你!!

4

1 回答 1

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 
}

让我知道这个是否奏效。

于 2012-12-01T11:41:26.013 回答