首页
/ QMUI iOS 4.8.0版本中QMUIPopupMenuView的自定义样式实践

QMUI iOS 4.8.0版本中QMUIPopupMenuView的自定义样式实践

2025-05-30 19:23:13作者:凤尚柏Louis

在QMUI iOS框架的4.8.0版本中,QMUIPopupMenuView组件经历了一些重要的API变化,特别是关于菜单项样式自定义的部分。这些变化让开发者需要采用新的方式来实现菜单项在不同状态下的样式定制。

样式定制的演变

在早期版本中,QMUIPopupMenuView提供了直接的API来设置菜单项的字体和颜色,开发者可以轻松地为不同状态(如选中、高亮)配置不同的样式。但在4.8.0版本中,这些直接的API被移除,转而采用更灵活的视图配置方式。

当前版本的解决方案

方法一:动态配置

开发者可以在每次显示菜单时,通过遍历所有菜单项视图来动态设置样式:

[popupMenuView showWithAnimated:YES completion:^{
    for (QMUIPopupMenuItemView *itemView in popupMenuView.itemViews) {
        itemView.textLabel.textColor = itemView.selected ? selectedColor : normalColor;
    }
}];

这种方式的优点是简单直接,但缺点是需要每次显示菜单时都执行配置代码。

方法二:自定义子类

更优雅的解决方案是创建自定义的QMUIPopupMenuItemView子类,将样式逻辑封装在视图内部:

@interface CustomPopupMenuItemView : QMUIPopupMenuItemView
@end

@implementation CustomPopupMenuItemView

- (void)setSelected:(BOOL)selected {
    [super setSelected:selected];
    self.textLabel.textColor = selected ? [UIColor redColor] : [UIColor blackColor];
}

- (void)setHighlighted:(BOOL)highlighted {
    [super setHighlighted:highlighted];
    self.textLabel.textColor = highlighted ? [UIColor blueColor] : (self.selected ? [UIColor redColor] : [UIColor blackColor]);
}

@end

然后在创建菜单时使用这个自定义类:

popupMenuView.itemViewClass = [CustomPopupMenuItemView class];

最佳实践建议

  1. 封装样式逻辑:将样式相关的代码封装在自定义视图类中,保持业务逻辑的简洁性。

  2. 状态管理:正确重写setSelected:和setHighlighted:方法,确保状态变化时样式能及时更新。

  3. 性能考虑:避免在频繁调用的方法中进行复杂的计算或对象创建。

  4. 一致性:确保自定义样式与QMUI的整体设计语言保持一致,提供良好的用户体验。

这种架构设计的变化实际上给了开发者更大的灵活性,虽然初期需要一些适应,但长期来看更有利于复杂场景的实现和维护。

登录后查看全文
热门项目推荐
相关项目推荐