选择时导航栏中的 UIBarButtonItem 会突出显示,但工具栏中的 UIBarButtonItem 不会

UIBarButtonItem in navigation bar is highlighted when selected but UIBarButtonItem in toolbar is not

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

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

选项按钮未按下:

选项按钮按下:

启动按钮未按下:

启动按钮按下:

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

确保您的按钮已初始化为 IB 中的默认状态。

然后确保.Highlighted 状态的Text Color 与.Default 状态的Text Color 不同。

启用:在测试时显示触摸突出显示。

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

  • 将按钮绑定到一个目标方法,该方法可以切换任何按钮 用于切换,然后更改按钮的图像 属性 因此。您可以使用 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
    

您只是错误地配置了 Interface Builder 的属性检查器中的 UIbarButtonItem/UIButton。

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

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

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