以编程方式添加UIBarButtonItem或编辑通过IB插入的UIBarButtonItem时出现问题

时间:2011-03-15 02:43:42

标签: iphone uibarbuttonitem uinavigationitem

我正在开发一个项目,它使用底部的标签栏翻阅我的应用的5个部分。其中一个部分加载一个地图视图,然后生成一个Web视图。这是首先使用Round Rect Buttons完成的,但它们阻碍了视图,所以我决定切换到导航栏。在Interface Builder中,我插入了一个导航项,其中有两个Bar Button Items(左侧和右侧)。通过控制从文件所有者拖动来激活与每个按钮关联的方法,我已经获得了两个按钮的功能。这样可以正常工作并启动我的网络视图,但是我希望能够做到并且还没有弄清楚到目前为止如何在网络中将其中一个按钮更改为“完成”或“返回”按钮视图。我已尝试以编程方式创建两个按钮但不会出现。这是我尝试用来完成这个的代码......

UIBarButtonItem *updatePosition = [[UIBarButtonItem alloc] initWithTitle:@"Update Position" 
style:UIBarButtonItemStylePlain target:self action:@selector(findMe)];

self.navigationItem.leftBarButtonItem = updatePosition;

[updatePosition release];

当我运行应用程序时,该按钮不会显示在我使用Xcode插入的导航项目上。我可以让按钮出现的唯一方法是使用Interface Builder插入它们,如前所述。但是,一旦我调出新视图,我就无法将左按钮更改为“后退”或“完成”按钮。我尝试运行此代码来更改我使用此代码插入的UIBarButtonItem上的按钮样式

self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStyleDone;

但无济于事。

1 个答案:

答案 0 :(得分:0)

以下是一些帮助您的实用方法:

+ (UIBarButtonItem *)setRightBarButtonItem:(SEL)action target:(id)sender withImage:(NSString *)imageName {
    UIImage *buttonImage = [UIImage imageNamed:imageName];
    UIBarButtonItem *buttonItem = [[[UIBarButtonItem alloc] initWithImage:buttonImage
                                                                    style:UIBarButtonItemStyleBordered
                                                                   target:sender
                                                                   action:action] autorelease];

    return buttonItem;
}

+ (UIBarButtonItem *)setRightBarButtonItem:(SEL)action target:(id)sender withBarButtonSystemItem:(UIBarButtonSystemItem)systemItem {
    UIBarButtonItem *buttonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:systemItem
                                                                                 target:sender
                                                                                 action:action] autorelease];

    return buttonItem;
}

用法:

// Done button.
self.navigationItem.rightBarButtonItem = [Utility setRightBarButtonItem:@selector(doneTapped:) target:self withBarButtonSystemItem:UIBarButtonSystemItemDone];