tableview

列举简单实例,学习封装

2015-07-28  本文已影响276人  Little_Dragon
//模型的所有属性,几乎都是用来让外界使用的,所以属性都写在外边即可。并提供类方法,方便外界创建模型(所谓模型,就是把数据整合化).h文件中的

// 头部标题
@property (nonatomic,copy) NSString *headerTitle;

// 尾部标题
@property (nonatomic,copy) NSString *footerTitle;

// 行模型数组
@property (nonatomic,strong) NSArray *items;

// 构造方法(以类名开头)(简单的不许要传参数, 复杂的传参数,但是无非就是把传入的参数,给自己的属性进行赋值)
+ (instancetype)group;

// .m中的实现方法
+ (instancetype)group
{
    LXLGroupItem *group = [[self alloc]init];
    return group;
}
/* 这里解释两个事情
    1.为什么用instancetype,而不用id。非常实用的一点是instancetype代指的是:实例对象,id代指的是:任何对象,有时候简单数据变量都可以。 这就局限了id是不能实现点语法,而instancetype是可以实现的。
    2. 为什么用self,而不用当前类(LXLGroupItem),这是为了继承,以及程序扩展性才这么写的,以后也必须这么写。如果自己有子类,那么子类就会继承自己的方法,但是如果写成了LXLGroupItem,就一直创建的是父类对象,而不是子类对象。(有些需求是子类独有的,所以必须创建子类对象) (这是继承中的内容)。
*/
// 构造方法,创建cell
+ (instancetype)cellWithTableView:(UITableView *)tableView withStyle:(UITableViewCellStyle )style
{

    static NSString *ID = @"setting";
    LXLSettingCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    if (cell == nil) {
        cell = [[self alloc]initWithStyle:style reuseIdentifier:ID];
    }
    return cell;

}

// 外界接收到item,拿来一一赋值
- (void)setItem:(LXLSettingItem *)item
{
    _item = item;
    [self setUp];
    [self setUpAccessoryView];
}

- (void)setUp
{
    self.imageView.image = _item.image;
    self.textLabel.text = _item.title;
    self.detailTextLabel.text = _item.subTitle;


}
// 根据接收过来的item的类,进行选择。
- (void)setUpAccessoryView
{

    // 先if 再 else if 再 else 按顺序来,有个良好的习惯
    if ([_item isKindOfClass:[LXLSettingItemArrow class]]) {
        UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage  imageNamed:@"arrow_right"]];
       self.accessoryView = imageView;

    }else if ([_item isKindOfClass:[LXLSettingItemSwitch class]]) {
        UISwitch *switchView = [[UISwitch alloc]init];
       self.accessoryView = switchView;
    }else{

        self.accessoryView = nil;
    }



}

需要注意的是:此类跳转只针对与 cell的accessoryView 是箭头的操作,如果是switch的话,则跳出蒙版。

    item.block = ^(NSIndexPath *path){               // 只要确定选中的行,就能够让键盘弹出后,不挡住选中的行        UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:path];        UITextField *textField = [[UITextField alloc]init];        [textField becomeFirstResponder];        [cell addSubview:textField];       
    };

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    LXLGroupItem *group = self.groups[indexPath.section];
    LXLSettingItem *item = group.items[indexPath.row];
    if (item.block) {
        item.block(indexPath);
     }
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{    [self.view endEditing:YES];
}
上一篇下一篇

猜你喜欢

热点阅读