【问题标题】:UIBarButtonItem in navigation bar is highlighted when selected but UIBarButtonItem in toolbar is not选择时导航栏中的 UIBarButtonItem 突出显示,但工具栏中的 UIBarButtonItem 未突出显示
【发布时间】:2017-02-09 02:38:02
【问题描述】:

我有一个简单的UITableViewController 和一个NavigationController 作为根视图控制器。我在导航栏中添加了“选项”UIBarButtonItem,在工具栏中添加了“开始”UIBarButtonItem,如下所示:

。我遇到的问题是“选项”按钮在按下时会突出显示,就像普通的UIButton 一样,但工具栏上的“开始”按钮不会。这非常不方便,因为它使用户很难知道他们是否真的按下了按钮。这种行为如下所示:

选项按钮未按下:

选项按钮按下:

开始按钮未按下:

开始按钮按下:

我不知道如何解决此问题。我确实验证了“开始”按钮确实有效,所以突出显示问题不是因为按钮不工作。此外,有趣的是,“开始”按钮确实在长按时会突出显示。

【问题讨论】:

  • 虽然这是一种宝贵的资源,但它并不能真正解决问题的根本原因。我想知道为什么UIBarButtonItem 会在导航栏中自动突出显示,而不是在工具栏中。
  • 您好,我已尝试创建您面临的问题。我在导航栏中添加了工具栏和按钮,当点击按钮时,机器人会突出显示。你能告诉我你是如何添加按钮的以及你设置了什么属性的开始按钮。
  • 你能添加一些代码sn-p吗?我试过了,按钮突出显示。
  • 你能寄一份样品吗?我刚刚尝试了一个测试项目,例如您的配置(NavigationController -> TableVC with top and bottom bar ...并且所有按钮都具有您正在寻找的相同选择效果(?)所以如果没有更多就无法重现您的错误信息...

标签: ios uitableview swift interface-builder uibarbuttonitem


【解决方案1】:

您只是在 Interface Builder 的 Attributes Inspector 中错误配置了 UIbarButtonItem/UIButton。

无论看起来多么令人费解,都没有必要浪费时间研究这样一个微不足道的问题。只需删除该开始按钮,然后再次将一个新按钮放入工具栏中。 没有理由让它的行为与上面的选项按钮不同。

【讨论】:

  • 只是一个附录 - 我感觉选项栏按钮项的类型是“完成”而不是“自定义”,这可能是“开始”按钮没有发生这种情况的原因。
  • 那很好,但漂亮的动画行为是 barbuttonitems、工具栏按钮项和 uibuttons 的默认行为。只有当你开始修补它们时,你最终才会失去淡入淡出动画。
【解决方案2】:

您应该将按钮类型从 UIButtonTypeCustom 更改为 UIButtonTypeSystem

【讨论】:

    【解决方案3】:

    确保您的按钮在 IB 中使用 .Default 状态进行初始化。

    然后确保 .Highlighted 状态文本颜色不同于 .Default 状态文本颜色。

    启用:在测试中显示 Touch On Highlight。

    【讨论】:

      【解决方案4】:

      没有内置方法,但我可以想到一些自定义方法:

      • 将按钮绑定到切换按钮的目标方法 用于切换,然后更改按钮的图像属性 因此。您可以使用 2 张图像,其中一张用于选定的状态一张 为默认值。

      • 创建你自己的 UIBarButtonItem 子类,看起来像 这个:

            @interface CustomBarButtonItem : UIBarButtonItem {
                BOOL _state;
                UIImage * selectedImage;
                UIImage * defaultImage;
            }
            - (BOOL)toggleState;
            @property (nonatomic, retain) UIImage * selectedImage;
            @property (nonatomic, retain) UIImage * defaultImage;
            @end
        
        @implementation CustomBarButtonItem
        - (BOOL)toggleState {
            if (_state) {
                // Switch to Off state
                self.image = defaultImage;
            }
            else {
                // Switch to On state
                self.image = selectedImage;
            }
            return _state = !_state;
        }
        @end
        

      【讨论】:

        【解决方案5】:

        工具栏是否设置为半透明?我怀疑你的导航栏是,工具栏不是。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-25
          • 1970-01-01
          相关资源
          最近更新 更多