| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- //
- // MMSheetView.m
- // MMPopupView
- //
- // Created by Ralph Li on 9/6/15.
- // Copyright © 2015 LJC. All rights reserved.
- //
- #import "MMSheetView.h"
- #import "MMPopupItem.h"
- #import "MMPopupCategory.h"
- #import "MMPopupDefine.h"
- #import <Masonry/Masonry.h>
- @interface MMSheetView()
- @property (nonatomic, strong) UIView *titleView;
- @property (nonatomic, strong) UILabel *titleLabel;
- @property (nonatomic, strong) UIView *buttonView;
- @property (nonatomic, strong) UIButton *cancelButton;
- @property (nonatomic, strong) NSArray *actionItems;
- @end
- @implementation MMSheetView
- - (instancetype)initWithTitle:(NSString *)title items:(NSArray *)items
- {
- self = [super init];
-
- if ( self )
- {
- NSAssert(items.count>0, @"Could not find any items.");
-
- MMSheetViewConfig *config = [MMSheetViewConfig globalConfig];
-
- self.type = MMPopupTypeSheet;
- self.actionItems = items;
-
- self.backgroundColor = config.splitColor;
-
- [self mas_makeConstraints:^(MASConstraintMaker *make) {
- make.width.mas_equalTo([UIScreen mainScreen].bounds.size.width);
- }];
- [self setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];
- [self setContentHuggingPriority:UILayoutPriorityFittingSizeLevel forAxis:UILayoutConstraintAxisVertical];
-
- MASViewAttribute *lastAttribute = self.mas_top;
- if ( title.length > 0 )
- {
- self.titleView = [UIView new];
- [self addSubview:self.titleView];
- [self.titleView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.right.top.equalTo(self);
- }];
- self.titleView.backgroundColor = config.backgroundColor;
-
- self.titleLabel = [UILabel new];
- [self.titleView addSubview:self.titleLabel];
- [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
- make.edges.equalTo(self.titleView).insets(UIEdgeInsetsMake(config.innerMargin, config.innerMargin, config.innerMargin, config.innerMargin));
- }];
- self.titleLabel.textColor = config.titleColor;
- self.titleLabel.font = [UIFont systemFontOfSize:config.titleFontSize];
- self.titleLabel.textAlignment = NSTextAlignmentCenter;
- self.titleLabel.numberOfLines = 0;
- self.titleLabel.text = title;
-
- lastAttribute = self.titleView.mas_bottom;
- }
-
- self.buttonView = [UIView new];
- [self addSubview:self.buttonView];
- [self.buttonView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.right.equalTo(self);
- make.top.equalTo(lastAttribute);
- }];
-
- __block UIButton *firstButton = nil;
- __block UIButton *lastButton = nil;
- for ( NSInteger i = 0 ; i < items.count; ++i )
- {
- MMPopupItem *item = items[i];
-
- UIButton *btn = [UIButton mm_buttonWithTarget:self action:@selector(actionButton:)];
- [self.buttonView addSubview:btn];
- btn.tag = i;
-
- [btn mas_makeConstraints:^(MASConstraintMaker *make) {
-
- make.left.right.equalTo(self.buttonView).insets(UIEdgeInsetsMake(0, -MM_SPLIT_WIDTH, 0, -MM_SPLIT_WIDTH));
- make.height.mas_equalTo(config.buttonHeight);
-
- if ( !firstButton )
- {
- firstButton = btn;
- make.top.equalTo(self.buttonView.mas_top).offset(-MM_SPLIT_WIDTH);
- }
- else
- {
- make.top.equalTo(lastButton.mas_bottom).offset(-MM_SPLIT_WIDTH);
- make.height.equalTo(firstButton);
- }
-
- lastButton = btn;
- }];
- [btn setBackgroundImage:[UIImage mm_imageWithColor:config.backgroundColor] forState:UIControlStateNormal];
- [btn setBackgroundImage:[UIImage mm_imageWithColor:config.backgroundColor] forState:UIControlStateDisabled];
- [btn setBackgroundImage:[UIImage mm_imageWithColor:config.itemPressedColor] forState:UIControlStateHighlighted];
- [btn setTitle:item.title forState:UIControlStateNormal];
- [btn setTitleColor:item.highlight?config.itemHighlightColor:item.disabled?config.itemDisableColor:config.itemNormalColor forState:UIControlStateNormal];
- btn.titleLabel.font = [UIFont systemFontOfSize:config.buttonFontSize];
- btn.layer.borderWidth = MM_SPLIT_WIDTH;
- btn.layer.borderColor = config.splitColor.CGColor;
- btn.enabled = !item.disabled;
- }
- [lastButton mas_updateConstraints:^(MASConstraintMaker *make) {
- make.bottom.equalTo(self.buttonView.mas_bottom).offset(MM_SPLIT_WIDTH);
- }];
-
- self.cancelButton = [UIButton mm_buttonWithTarget:self action:@selector(actionCancel)];
- [self addSubview:self.cancelButton];
- [self.cancelButton mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.right.equalTo(self.buttonView);
- make.height.mas_equalTo(config.buttonHeight);
- make.top.equalTo(self.buttonView.mas_bottom).offset(8);
- }];
- self.cancelButton.titleLabel.font = [UIFont systemFontOfSize:config.buttonFontSize];
- [self.cancelButton setBackgroundImage:[UIImage mm_imageWithColor:config.backgroundColor] forState:UIControlStateNormal];
- [self.cancelButton setBackgroundImage:[UIImage mm_imageWithColor:config.itemPressedColor] forState:UIControlStateHighlighted];
- [self.cancelButton setTitle:config.defaultTextCancel forState:UIControlStateNormal];
- [self.cancelButton setTitleColor:config.itemNormalColor forState:UIControlStateNormal];
-
- [self mas_updateConstraints:^(MASConstraintMaker *make) {
- make.bottom.equalTo(self.cancelButton.mas_bottom);
- }];
-
- }
-
- return self;
- }
- - (void)actionButton:(UIButton*)btn
- {
- MMPopupItem *item = self.actionItems[btn.tag];
-
- [self hide];
-
- if ( item.handler )
- {
- item.handler(btn.tag);
- }
- }
- - (void)actionCancel
- {
- [self hide];
- }
- @end
- @interface MMSheetViewConfig()
- @end
- @implementation MMSheetViewConfig
- + (MMSheetViewConfig *)globalConfig
- {
- static MMSheetViewConfig *config;
- static dispatch_once_t onceToken;
-
- dispatch_once(&onceToken, ^{
-
- config = [MMSheetViewConfig new];
-
- });
-
- return config;
- }
- - (instancetype)init
- {
- self = [super init];
-
- if ( self )
- {
- self.buttonHeight = 50.0f;
- self.innerMargin = 19.0f;
-
- self.titleFontSize = 14.0f;
- self.buttonFontSize = 17.0f;
-
- self.backgroundColor = MMHexColor(0xFFFFFFFF);
- self.titleColor = MMHexColor(0x666666FF);
- self.splitColor = MMHexColor(0xCCCCCCFF);
-
- self.itemNormalColor = MMHexColor(0x333333FF);
- self.itemDisableColor = MMHexColor(0xCCCCCCFF);
- self.itemHighlightColor = MMHexColor(0xE76153FF);
- self.itemPressedColor = MMHexColor(0xEFEDE7FF);
-
- self.defaultTextCancel = ASLocalizedString(@"取消");
- }
-
- return self;
- }
- @end
|