【问题标题】:Change (not init) a UIBarButtonItem identifier programmatically?以编程方式更改(而不是初始化) UIBarButtonItem 标识符?
【发布时间】:2010-06-16 15:06:10
【问题描述】:

在 IB 中,我可以将 UIBarButtonItem 的标识符设置为“播放”,这会添加播放按钮的图像(指向右侧的三角形)。

有没有办法以编程方式更改此图像?我想在按下播放按钮时将其更改为“暂停”。

我知道您可以使用标识符初始化 UIBarButtonItem,但我还没有找到在初始化后更改它的方法。这甚至可能吗?

我唯一能想到的就是删除旧按钮并在其位置初始化一个新按钮,但这似乎效率不高。

有什么想法吗?

【问题讨论】:

    标签: iphone uibarbuttonitem


    【解决方案1】:

    好的,我已经用谷歌搜索了这个问题并遇到了sample code from Apple,他们在其中做同样的事情(在工具栏按钮上切换播放/暂停按钮图形)。但他们没有使用UIBarButtonItem 的内置播放和暂停标识符,而是使用自定义UIButton 并切换自定义图像。

    因此,如果 Apple 在 UIButton 上创建和切换自定义图像而不是在内置播放和暂停 UIBarButtonItem 按钮上遇到麻烦,那么我认为可以肯定地说没有办法以编程方式更改 @ 的标识符987654325@.

    这是他们(Apple)在按下按钮时切换图像的方式:

    // Call this when the button you want to toggle is pressed:
    [playButton setImage:((p.playing == YES) ? pauseBtnBG : playBtnBG) forState:UIControlStateNormal];
    

    将 p.playing 替换为您想要保持按钮状态的任何 BOOL。 playButton 是工具栏中的自定义 UIButtonpauseBtnBGplayBtnBG 是要切换的图像。

    【讨论】:

      【解决方案2】:

      这似乎工作得很好:

      UIBarButtonItem *oldButton = [myToolBar.items objectAtIndex:1];
      [myToolBar setItems:[NSArray arrayWithObjects:[myToolBar objectAtIndex:0], [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemStop target:self action:@selector(tapStopRefreshButton:)],nil] animated:NO];
      [oldButton release];
      

      在这个例子中,我有一个 UIWebView 的工具栏,当有人单击重新加载时,我希望它更改为停止。工具栏只有一个灵活的空间和一个按钮 - 右对齐按钮 - 所以我抓住了对旧按钮的引用,用与旧按钮相同的选择器制作了一个新按钮,重置标签栏上的按钮,然后松开原来的按钮。

      不是最漂亮的,但您可以使用所有标准按钮而无需覆盖按钮类。

      【讨论】:

      • Apple 在 StitchedStreamPlayer 示例中执行此操作:developer.apple.com/library/ios/#samplecode/…
      • 虽然技术上不会像 OP 那样“更改”UIBarButtonSystemItem,但这个答案确实允许将一个系统项替换为另一个。
      • 虽然,在这个例子中,新的UIBarButtonItem应该在放入数组之前进行初始化,这样才能正常释放。
      • 为什么需要抓取和释放旧按钮?我看不出这是什么原因。
      • 非常感谢这个解决方案!
      【解决方案3】:

      2 个堆叠的工具栏怎么样?然后,您可以在顶部有一些系统按钮,在底部有其他按钮。如果按下播放按钮,则只需隐藏顶部工具栏。

      【讨论】:

      • 他正在寻找更改图像或交换按钮,而不是工具栏消失。
      • @JoshDM 但是,如果工具栏消失,向用户显示的按钮将会改变。此外,在这些情况下,通常您没有一个,而是一组您必须更改的按钮,因此我发现使用标准 UIBarButtonItem 的两个不同工具栏更容易,而不是创建和切换自定义 UIButton。也更容易“隐藏”视图。但你是对的不是问题的答案,而是提问者问题的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      相关资源
      最近更新 更多