diff --git a/SJStaticTableView.podspec b/SJStaticTableView.podspec index ffd1f3d..98f3326 100644 --- a/SJStaticTableView.podspec +++ b/SJStaticTableView.podspec @@ -3,7 +3,7 @@ Pod::Spec.new do |s| s.name = "SJStaticTableView" - s.version = "1.0.3" + s.version = "1.1.1" s.summary = "SJStaticTableView can be used to establish ViewControllers which contain static tableview such as setting page and userinfo page." s.homepage = "https://github.com/knightsj/SJStaticTableView" s.license = "MIT" diff --git a/SJStaticTableViewComponent/SJStaticTableViewCell+AccessoryDisclosureIndicator.h b/SJStaticTableViewComponent/SJStaticTableViewCell+AccessoryDisclosureIndicator.h index 737045f..b723892 100644 --- a/SJStaticTableViewComponent/SJStaticTableViewCell+AccessoryDisclosureIndicator.h +++ b/SJStaticTableViewComponent/SJStaticTableViewCell+AccessoryDisclosureIndicator.h @@ -9,5 +9,7 @@ #import "SJStaticTableViewCell.h" @interface SJStaticTableViewCell (AccessoryDisclosureIndicator) + - (void)configureAccessoryDisclosureIndicatorCellWithViewModel:(SJStaticTableviewCellViewModel *)viewModel; + @end diff --git a/SJStaticTableViewComponent/SJStaticTableViewCell+AccessoryDisclosureIndicator.m b/SJStaticTableViewComponent/SJStaticTableViewCell+AccessoryDisclosureIndicator.m index 3dfff8e..f6250e6 100644 --- a/SJStaticTableViewComponent/SJStaticTableViewCell+AccessoryDisclosureIndicator.m +++ b/SJStaticTableViewComponent/SJStaticTableViewCell+AccessoryDisclosureIndicator.m @@ -9,9 +9,10 @@ #import "SJStaticTableViewCell+AccessoryDisclosureIndicator.h" @implementation SJStaticTableViewCell (AccessoryDisclosureIndicator) + - (void)configureAccessoryDisclosureIndicatorCellWithViewModel:(SJStaticTableviewCellViewModel *)viewModel { - + //左侧控件的配置 [self layoutLeftPartSubViewsWithViewModel:viewModel]; //右侧存在箭头 @@ -20,12 +21,60 @@ - (void)configureAccessoryDisclosureIndicatorCellWithViewModel:(SJStaticTablevie //右侧存在箭头+文字 if ( (viewModel.indicatorLeftTitle) && (viewModel.indicatorLeftLabelSize.width != 0)) { [self.contentView addSubview:self.indicatorLeftLabel]; + [self configureIndicatorLeftLabel]; } //右侧存在箭头+图片 if ((self.viewModel.indicatorLeftImage) && (viewModel.indicatorLeftImageSize.height != 0)){ [self.contentView addSubview:self.indicatorLeftImageView]; + [self configureIndicatorLeftImage]; } +} + +//将右侧label的配置从懒加载里抽出来 +- (void)configureIndicatorLeftLabel +{ + + self.indicatorLeftLabel.font = self.viewModel.indicatorLeftLabelTextFont; + self.indicatorLeftLabel.textColor = self.viewModel.indicatorLeftLabelTextColor; + self.indicatorLeftLabel.text = self.viewModel.indicatorLeftTitle; + if (!self.viewModel.hasIndicatorImageAndLabel) { + //只存在右侧Label + self.indicatorLeftLabel.frame = CGRectMake(self.indicatorArrow.frame.origin.x - SJLeftGap - self.viewModel.indicatorLeftLabelSize.width , (self.viewModel.cellHeight - self.viewModel.indicatorLeftLabelSize.height)/2, self.viewModel.indicatorLeftLabelSize.width, self.viewModel.indicatorLeftLabelSize.height); + }else{ + //右侧Label和image同时存在 + if (self.viewModel.isImageFirst) { + + self.indicatorLeftLabel.frame = CGRectMake(SJScreenWidth - SJLeftGap - self.indicatorArrow.bounds.size.width - self.viewModel.indicatorLeftImageAndLabelGap - self.viewModel.indicatorLeftImageSize.width - SJLeftGap - self.viewModel.indicatorLeftLabelSize.width, (self.viewModel.cellHeight - self.viewModel.indicatorLeftLabelSize.height)/2, self.viewModel.indicatorLeftLabelSize.width, self.viewModel.indicatorLeftLabelSize.height); + + }else{ + + self.indicatorLeftLabel.frame = CGRectMake(SJScreenWidth - SJLeftGap - self.indicatorArrow.bounds.size.width - SJLeftGap - self.viewModel.indicatorLeftLabelSize.width, (self.viewModel.cellHeight - self.viewModel.indicatorLeftLabelSize.height)/2, self.viewModel.indicatorLeftLabelSize.width, self.viewModel.indicatorLeftLabelSize.height); + } + } } + +//将右侧image的配置从懒加载里抽出来 +- (void)configureIndicatorLeftImage +{ + self.indicatorLeftImageView.image = self.viewModel.indicatorLeftImage; + + if (!self.viewModel.hasIndicatorImageAndLabel) { + //只存在右侧image + self.indicatorLeftImageView.frame = CGRectMake(self.indicatorArrow.frame.origin.x - SJLeftGap - self.viewModel.indicatorLeftImageSize.width, (self.viewModel.cellHeight - self.viewModel.indicatorLeftImageSize.height)/2, self.viewModel.indicatorLeftImageSize.width , self.viewModel.indicatorLeftImageSize.height); + }else{ + //右侧Label和image同时存在 + if (self.viewModel.isImageFirst) { + + self.indicatorLeftImageView.frame = CGRectMake(SJScreenWidth - SJLeftGap - self.indicatorArrow.bounds.size.width - SJLeftGap - self.viewModel.indicatorLeftImageSize.width, (self.viewModel.cellHeight - self.viewModel.indicatorLeftImageSize.height)/2, self.viewModel.indicatorLeftImageSize.width, self.viewModel.indicatorLeftImageSize.height); + + }else{ + + self.indicatorLeftImageView.frame = CGRectMake(SJScreenWidth - SJLeftGap - self.indicatorArrow.bounds.size.width - self.viewModel.indicatorLeftImageAndLabelGap - self.viewModel.indicatorLeftLabelSize.width - SJLeftGap - self.viewModel.indicatorLeftImageSize.width, (self.viewModel.cellHeight - self.viewModel.indicatorLeftImageSize.height)/2, self.viewModel.indicatorLeftImageSize.width,self.viewModel.indicatorLeftImageSize.height); + } + + } +} + @end diff --git a/SJStaticTableViewComponent/SJStaticTableViewCell.h b/SJStaticTableViewComponent/SJStaticTableViewCell.h index 8af7f20..59c995d 100644 --- a/SJStaticTableViewComponent/SJStaticTableViewCell.h +++ b/SJStaticTableViewComponent/SJStaticTableViewCell.h @@ -41,4 +41,5 @@ //统一的,布局cell左侧部分的内容(标题 / 图片 + 标题),所有系统风格的cell都要调用这个方法 - (void)layoutLeftPartSubViewsWithViewModel:(SJStaticTableviewCellViewModel *)viewModel; + @end diff --git a/SJStaticTableViewComponent/SJStaticTableViewCell.m b/SJStaticTableViewComponent/SJStaticTableViewCell.m index f1254b1..5438cae 100644 --- a/SJStaticTableViewComponent/SJStaticTableViewCell.m +++ b/SJStaticTableViewComponent/SJStaticTableViewCell.m @@ -17,16 +17,37 @@ - (void)layoutLeftPartSubViewsWithViewModel:(SJStaticTableviewCellViewModel *)vi //存在最左边的图片 if (self.viewModel.leftImage) { + [self.contentView addSubview:self.leftImageView]; + + self.leftImageView.image = self.viewModel.leftImage; + self.leftImageView.frame = CGRectMake(SJLeftGap, (self.viewModel.cellHeight - self.viewModel.leftImageSize.height)/2, self.viewModel.leftImageSize.width , self.viewModel.leftImageSize.height); } + //存在标题文字 if (self.viewModel.leftTitle.length) { + [self.contentView addSubview:self.leftTitleLabel]; + + self.leftTitleLabel.font = self.viewModel.leftLabelTextFont; + self.leftTitleLabel.textColor = self.viewModel.leftLabelTextColor; + self.leftTitleLabel.text = self.viewModel.leftTitle; + + CGFloat x = 0; + if (_leftImageView) { + x = CGRectGetMaxX(self.leftImageView.frame) + self.viewModel.leftImageAndLabelGap; + }else{ + x = SJLeftGap; + } + + self.leftTitleLabel.frame = CGRectMake( x, (self.viewModel.cellHeight - self.viewModel.leftTitleLabelSize.height)/2, self.viewModel.leftTitleLabelSize.width, self.viewModel.leftTitleLabelSize.height); } + } + #pragma mark- switch block - (void)switchTouched:(UISwitch *)indicatorSwitch { @@ -41,8 +62,7 @@ - (void)switchTouched:(UISwitch *)indicatorSwitch - (UIImageView *)leftImageView { if (!_leftImageView) { - _leftImageView = [[UIImageView alloc] initWithImage:_viewModel.leftImage]; - _leftImageView.frame = CGRectMake(SJLeftGap, (_viewModel.cellHeight - _viewModel.leftImageSize.height)/2, _viewModel.leftImageSize.width , _viewModel.leftImageSize.height); + _leftImageView = [[UIImageView alloc] init]; } return _leftImageView; } @@ -51,16 +71,6 @@ - (UILabel *)leftTitleLabel { if (!_leftTitleLabel) { _leftTitleLabel= [[UILabel alloc] init]; - _leftTitleLabel.font = _viewModel.leftLabelTextFont; - _leftTitleLabel.textColor = _viewModel.leftLabelTextColor; - _leftTitleLabel.text = _viewModel.leftTitle; - CGFloat x = 0; - if (_leftImageView) { - x = CGRectGetMaxX(_leftImageView.frame) + _viewModel.leftImageAndLabelGap; - }else{ - x = SJLeftGap; - } - _leftTitleLabel.frame = CGRectMake( x, (_viewModel.cellHeight - _viewModel.leftTitleLabelSize.height)/2, _viewModel.leftTitleLabelSize.width, _viewModel.leftTitleLabelSize.height); } return _leftTitleLabel; } @@ -82,33 +92,14 @@ - (UIImageView *)indicatorArrow if (!_indicatorArrow) { _indicatorArrow = [[UIImageView alloc] initWithImage:[UIImage imageNamed:SJIndicatorArrow]]; _indicatorArrow.frame = CGRectMake(SJScreenWidth - SJLeftGap - _indicatorArrow.bounds.size.width, (_viewModel.cellHeight - _indicatorArrow.bounds.size.height)/2, _indicatorArrow.bounds.size.width, _indicatorArrow.bounds.size.height); - } - + } return _indicatorArrow; } - (UILabel *)indicatorLeftLabel { if (!_indicatorLeftLabel) { - _indicatorLeftLabel= [[UILabel alloc] init]; - _indicatorLeftLabel.font = _viewModel.indicatorLeftLabelTextFont; - _indicatorLeftLabel.textColor = _viewModel.indicatorLeftLabelTextColor; - _indicatorLeftLabel.text = _viewModel.indicatorLeftTitle; - - if (!_viewModel.hasIndicatorImageAndLabel) { - _indicatorLeftLabel.frame = CGRectMake(_indicatorArrow.frame.origin.x - SJLeftGap - _viewModel.indicatorLeftLabelSize.width , (_viewModel.cellHeight - _viewModel.indicatorLeftLabelSize.height)/2, _viewModel.indicatorLeftLabelSize.width, _viewModel.indicatorLeftLabelSize.height); - }else{ - //同时存在 - if (_viewModel.isImageFirst) { - - _indicatorLeftLabel.frame = CGRectMake(SJScreenWidth - SJLeftGap - _indicatorArrow.bounds.size.width - _viewModel.indicatorLeftImageAndLabelGap - _viewModel.indicatorLeftImageSize.width - SJLeftGap - _viewModel.indicatorLeftLabelSize.width, (_viewModel.cellHeight - _viewModel.indicatorLeftLabelSize.height)/2, _viewModel.indicatorLeftLabelSize.width, _viewModel.indicatorLeftLabelSize.height); - - }else{ - - _indicatorLeftLabel.frame = CGRectMake(SJScreenWidth - SJLeftGap - _indicatorArrow.bounds.size.width - SJLeftGap - _viewModel.indicatorLeftLabelSize.width, (_viewModel.cellHeight - _viewModel.indicatorLeftLabelSize.height)/2, _viewModel.indicatorLeftLabelSize.width, _viewModel.indicatorLeftLabelSize.height); - } - } - + _indicatorLeftLabel= [[UILabel alloc] init]; } return _indicatorLeftLabel; } @@ -116,24 +107,7 @@ - (UILabel *)indicatorLeftLabel - (UIImageView *)indicatorLeftImageView { if (!_indicatorLeftImageView) { - _indicatorLeftImageView = [[UIImageView alloc] initWithImage:_viewModel.indicatorLeftImage]; - - if (!_viewModel.hasIndicatorImageAndLabel) { - _indicatorLeftImageView.frame = CGRectMake(_indicatorArrow.frame.origin.x - SJLeftGap - _viewModel.indicatorLeftImageSize.width, (_viewModel.cellHeight - _viewModel.indicatorLeftImageSize.height)/2, _viewModel.indicatorLeftImageSize.width , _viewModel.indicatorLeftImageSize.height); - }else{ - - if (_viewModel.isImageFirst) { - - _indicatorLeftImageView.frame = CGRectMake(SJScreenWidth - SJLeftGap - _indicatorArrow.bounds.size.width - SJLeftGap - _viewModel.indicatorLeftImageSize.width, (_viewModel.cellHeight - _viewModel.indicatorLeftImageSize.height)/2, _viewModel.indicatorLeftImageSize.width, _viewModel.indicatorLeftImageSize.height); - - }else{ - - _indicatorLeftImageView.frame = CGRectMake(SJScreenWidth - SJLeftGap - _indicatorArrow.bounds.size.width - _viewModel.indicatorLeftImageAndLabelGap - _viewModel.indicatorLeftLabelSize.width - SJLeftGap - _viewModel.indicatorLeftImageSize.width, (_viewModel.cellHeight - _viewModel.indicatorLeftImageSize.height)/2, _viewModel.indicatorLeftImageSize.width,_viewModel.indicatorLeftImageSize.height); - - } - - } - + _indicatorLeftImageView = [[UIImageView alloc] init]; } return _indicatorLeftImageView; } diff --git a/SJStaticTableViewComponent/SJStaticTableViewController.h b/SJStaticTableViewComponent/SJStaticTableViewController.h index 8dfc7ca..cdaf41a 100644 --- a/SJStaticTableViewComponent/SJStaticTableViewController.h +++ b/SJStaticTableViewComponent/SJStaticTableViewController.h @@ -10,6 +10,7 @@ #import "SJStaticTableViewHeader.h" #import "Factory.h"//假数据 + @protocol SJStaticTableViewControllerDelegate @required @@ -21,4 +22,7 @@ @property (nonatomic, strong) SJStaticTableView *tableView; @property (nonatomic, strong) SJStaticTableViewDataSource *dataSource; + +- (SJStaticTableviewCellViewModel *)retrieveCellViewModelAtIndexPath:(NSIndexPath *)indexPath; + @end diff --git a/SJStaticTableViewComponent/SJStaticTableViewController.m b/SJStaticTableViewComponent/SJStaticTableViewController.m index 18a3742..be68aeb 100644 --- a/SJStaticTableViewComponent/SJStaticTableViewController.m +++ b/SJStaticTableViewComponent/SJStaticTableViewController.m @@ -9,8 +9,11 @@ #import "SJStaticTableViewController.h" #import "SJStaticTableViewDataSource.h" +@interface SJStaticTableViewController() +@end + @implementation SJStaticTableViewController diff --git a/SJStaticTableViewComponent/SJStaticTableViewDataSource.m b/SJStaticTableViewComponent/SJStaticTableViewDataSource.m index d9859bf..1020336 100644 --- a/SJStaticTableViewComponent/SJStaticTableViewDataSource.m +++ b/SJStaticTableViewComponent/SJStaticTableViewDataSource.m @@ -20,6 +20,8 @@ @interface SJStaticTableViewDataSource() @implementation SJStaticTableViewDataSource +#pragma mark- Public API + - (instancetype)initWithViewModelsArray:(NSArray *)viewModelsArray configureBlock:(SJStaticCellConfigureBlock)block { self = [super init]; @@ -30,6 +32,7 @@ - (instancetype)initWithViewModelsArray:(NSArray *)viewModelsArray configureBloc return self; } +#pragma mark- SJStaticTableViewDataSource - (SJStaticTableviewCellViewModel *)tableView:(UITableView *)tableview cellViewModelAtIndexPath:(NSIndexPath *)indexPath { if (self.viewModelsArray.count > indexPath.section) { @@ -49,7 +52,7 @@ - (SJStaticTableviewSectionViewModel *)tableView:(UITableView *)tableView sectio return nil; } -#pragma mark - Tableview data source +#pragma mark - Tableview Datasource - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { @@ -64,7 +67,7 @@ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - + SJStaticTableviewSectionViewModel *sectionViewModel = self.viewModelsArray[indexPath.section]; SJStaticTableviewCellViewModel *cellViewModel = sectionViewModel.cellViewModelsArray[indexPath.row]; diff --git a/SJStaticTableViewComponent/SJStaticTableviewSectionViewModel.h b/SJStaticTableViewComponent/SJStaticTableviewSectionViewModel.h index 7e0578d..4988504 100644 --- a/SJStaticTableViewComponent/SJStaticTableviewSectionViewModel.h +++ b/SJStaticTableViewComponent/SJStaticTableviewSectionViewModel.h @@ -13,7 +13,7 @@ @property (nonatomic, copy) NSString *sectionHeaderTitle; //该section的标题 @property (nonatomic, copy) NSString *sectionFooterTitle; //该section的标题 -@property (nonatomic, strong) NSArray *cellViewModelsArray; //该section的数据源 +@property (nonatomic, strong) NSMutableArray *cellViewModelsArray; //该section的数据源 @property (nonatomic, assign) CGFloat sectionHeaderHeight; //header的高度 @property (nonatomic, assign) CGFloat sectionFooterHeight; //footer的高度 diff --git a/SJStaticTableViewComponent/SJStaticTableviewSectionViewModel.m b/SJStaticTableViewComponent/SJStaticTableviewSectionViewModel.m index e4adc34..2ab4a19 100644 --- a/SJStaticTableViewComponent/SJStaticTableviewSectionViewModel.m +++ b/SJStaticTableViewComponent/SJStaticTableviewSectionViewModel.m @@ -26,7 +26,7 @@ - (instancetype)initWithCellViewModelsArray:(NSArray *)cellViewModelsArray _indicatorLeftLabelTextColor = SJIndicatorLeftTitleTextColor; _indicatorLeftImageSize = CGSizeMake(SJImgWidth, SJImgWidth); _indicatorLeftImageAndLabelGap = SJRightMiddleGap; - _cellViewModelsArray = cellViewModelsArray; + _cellViewModelsArray = [cellViewModelsArray mutableCopy]; } return self; } diff --git a/SJStaticTableViewDemo/SJStaticTableViewDemo.xcodeproj/project.xcworkspace/xcuserdata/SunShijie.xcuserdatad/UserInterfaceState.xcuserstate b/SJStaticTableViewDemo/SJStaticTableViewDemo.xcodeproj/project.xcworkspace/xcuserdata/SunShijie.xcuserdatad/UserInterfaceState.xcuserstate index 73d1f20..8f5f066 100644 Binary files a/SJStaticTableViewDemo/SJStaticTableViewDemo.xcodeproj/project.xcworkspace/xcuserdata/SunShijie.xcuserdatad/UserInterfaceState.xcuserstate and b/SJStaticTableViewDemo/SJStaticTableViewDemo.xcodeproj/project.xcworkspace/xcuserdata/SunShijie.xcuserdatad/UserInterfaceState.xcuserstate differ