【问题标题】:Problems adding a UIBarButtonItem programmatically or editing one inserted via IB以编程方式添加 UIBarButtonItem 或编辑通过 IB 插入的问题
【发布时间】:2011-03-15 02:43:42
【问题描述】:

我正在开发一个项目,该项目使用底部的标签栏来浏览我的应用程序的 5 个部分。其中一个部分加载一个地图视图,然后生成一个 web 视图。起初是用圆形矩形按钮完成的,但它们妨碍了视图,所以我决定切换到导航栏。在 Interface Builder 中,我插入了一个导航项,并在其中插入了两个条形按钮项(左侧和右侧)。通过从文件所有者拖动控件以触发与每个按钮关联的方法,我已经获得了两个按钮的功能。这工作正常并启动我的网络视图,但我希望能够做并且到目前为止还没有弄清楚如何在网络中将其中一个按钮更改为“完成”或“返回”按钮看法。我尝试以编程方式创建两个按钮,但都不会出现。这是我尝试用来完成此操作的代码...

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

self.navigationItem.leftBarButtonItem = updatePosition;

[updatePosition release];

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

self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStyleDone;

但无济于事。

【问题讨论】:

    标签: iphone uibarbuttonitem uinavigationitem


    【解决方案1】:

    这里有一些实用方法可以帮助您:

    + (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];
    

    【讨论】:

    • 所以我看到这些方法的标题都是 setRightBarButtonItem,但调用该方法的代码行将其分配给 leftBarButtonItem。我假设上述方法是可以互换的,因为它们都只返回一个按钮项,所以它被分配到哪一侧并不重要?
    • 我一直在尝试实现这一点,但我并没有真正理解您在此处使用的“实用程序”保留字。对 Obj C 来说很新,所以如果这是常识,我深表歉意。
    • 如果您不喜欢,您不必使用 Utility 类。您可以简单地将这些方法(将 + 替换为 -)在您的 View Controller 实现中并调用 [self setRightBarButtonItem:];而是。
    • 你说得对,当我打算放 rightBarButtonItem 时,我偶然有 leftBarButtonItem。你是对的,这些方法也可以互换。如果你真的想的话,你可以简单地创建另一个方法并调用它 setLeftRightBarButtonItem。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多