UITableView设置界面完整封装(二)
简单MVC实现UITableView设置界面之Cell右边类型设置
首先来看看第一种方法证明使用,结合两种方法之后根据个人的爱好去选择就可以了,
一:使用枚举的方式
在Cell模型中定义一个枚举类,
typedef enum : NSUInteger { XMGSettingItemRightViewTypeArrow, XMGSettingItemRightViewTypeSwitch, } XMGSettingItemRightViewType;
然后定义一个枚举对应的属性
/** cell右边辅助视图类型 * @property (nonatomic, assign) iCocosSettingItemRightViewType type;
因为cell中的一个cellforRowAtIndexPath里面设置对应的cell右边的类型(accessoryType和accessoryView),
所以这里就在这个方法里面判断对应的模型,就是外面传过来的枚举类型设置对应的控件属性
最后一步我们就可以在对应的创建Cell的时候设置对应枚举的类型
此时就可以实现类型的设置
二:使用继承模型的方式
第二种就是使用继承自Cell模型的子类模型用来实现类型的设置
好处:
- 1:每个Cell不一样,而且不同的Cell可能不需要实现点击进入
- 2:更加体现了MVC思念,实现解藕
新建对应类型的两个模型类,里面不需要做任何操作
SWitch中定义一个开关属性来记录开关的状态
/** 开关值 */
@property (nonatomic, assign) BOOL isOpen;
在Cell中判断并且设置对应的类型
#pragma mark - 设置辅助视图 - (void)setUpAccessoryView { // 设置辅助视图 if ([_item isKindOfClass:[iCocosSettingArrowItem class]]) { // 展示箭头 UIImageView *arrowView = [[UIImageView alloc] initWithImage:[UIImageimageNamed:@"arrow_right"]]; self.accessoryView = arrowView; }else if ([_item isKindOfClass:[iCocosSettingSwitchItem class]]){ // 展示开关 UISwitch *switchView = [[UISwitch alloc] init]; self.accessoryView = switchView; }else{ self.accessoryView = nil; } }
然后修改对应创建Cell的类型,根据对应的类型使用对应的类核父类的方法来实现不同类型的现实
// 使用兑换码 iCocosSettingItem *RedeemCode = [iCocosSettingArrowItem itemWithImage:[UIImage imageNamed:@"RedeemCode"] title:@"使用兑换码"]; // 使用兑换码 iCocosSettingItem *RedeemCode1 = [iCocosSettingArrowItem itemWithImage:[UIImage imageNamed:@"RedeemCode"] title:@"使用兑换码"]; // 使用兑换码 iCocosSettingItem *RedeemCode2 = [iCocosSettingArrowItem itemWithImage:[UIImage imageNamed:@"RedeemCode"] title:@"使用兑换码"]; // 使用兑换码 iCocosSettingItem *RedeemCode3 = [iCocosSettingArrowItem itemWithImage:[UIImage imageNamed:@"RedeemCode"] title:@"使用兑换码"]; // 描述第一组有多少个行模型,描述第1组 NSArray *items = @[RedeemCode,RedeemCode1,RedeemCode2,RedeemCode3]; // 创建组模型 iCocosGroupItem *group = [iCocosGroupItemgroupWithItems:items]; group.footerTitle = @"bcd"; // 添加到group总数组 [self.groups addObject:group];
这样同样可以实现不同类型的现实:
关于这里使用哪种方式这里就不多说了,看个人,不过第二种的好处更多!