当前位置: 移动技术网 > IT编程>移动开发>IOS > iOS开发系列 ---- UI (自定义TableView)

iOS开发系列 ---- UI (自定义TableView)

2018年11月14日  | 移动技术网IT编程  | 我要评论

夏磊leon,218.206.202.110,我知道你很难过伴奏

ios开发系列 ---- ui (自定义tableview)。本章实现效果:
customtableview

我们使用mvc架构来实现自定义tableview,具体的mvc介绍请自行百度,在本章中不作为主要内容讲解。

model层:

datasource.h

 

#import 

@interface datasource : nsobject

+ (nsarray *)getuserinfo;

@end

datasource.m

#import "datasource.h"

@implementation datasource

+ (nsarray *)getuserinfo {
    nsstring * path = [[nsbundle mainbundle] pathforresource:@"users" oftype:@"plist"];
    nsarray * arrayreturn = [nsarray arraywithcontentsoffile:path];
    return arrayreturn;
}

@end

view层:
customtableviewcell.h

#import 

@interface customtableviewcell : uitableviewcell

@property (nonatomic, strong) uilabel * labelname;//姓名
@property (nonatomic, strong) uilabel * labelnum; //手机号

@end

customtableviewcell.m

#import "customtableviewcell.h"

@implementation customtableviewcell

//重写初始化方法:将控件添加到单元格上,如果将子视图控件添加到cell上 借助contenview视图,这样的话cell上子视图会随着cell的变化而变化
- (instancetype)initwithstyle:(uitableviewcellstyle)style reuseidentifier:(nsstring *)reuseidentifier {
    if (self = [super initwithstyle:style reuseidentifier:reuseidentifier]) {
        self.labelname = [[uilabel alloc] initwithframe:cgrectmake(100, 0, self.bounds.size.width-200, 40)];
        self.labelname.textcolor = [uicolor cyancolor];
        self.labelname.textalignment = nstextalignmentcenter;
        [self.contentview addsubview:self.labelname];

        self.labelnum = [[uilabel alloc] initwithframe:cgrectmake(100, 40, self.bounds.size.width-200, 40)];
        self.labelnum.textcolor = [uicolor greencolor];
        self.labelnum.textalignment = nstextalignmentcenter;
        [self.contentview addsubview:self.labelnum];
    }
    return self;
}

- (void)awakefromnib {
    [super awakefromnib];
}

- (void)setselected:(bool)selected animated:(bool)animated {
    [super setselected:selected animated:animated];
}

@end

viewcontroller层:
viewcontroller.m

#import "viewcontroller.h"
#import "datasource.h"
#import "customtableviewcell.h"
#import "twoviewcontroller.h"

@interface viewcontroller ()<
uitableviewdatasource,
uitableviewdelegate>

@property (nonatomic, strong) nsmutablearray *arrayds;
@property (nonatomic, strong) uitableview *tableview;

@end

@implementation viewcontroller

- (void)viewdidload {
    [super viewdidload];

    [self setupdatas];
    [self setupsubviews];
}

- (void)setupdatas {
    //从model层拿到数据
    nsarray * array = [datasource getuserinfo];
    //把拿到的数据给我们的数据源
    self.arrayds = [[nsmutablearray alloc] initwitharray:array];
    self.navigationitem.title = @"自定义单元格";
}

- (void)setupsubviews {
    self.automaticallyadjustsscrollviewinsets = no;
    self.tableview = [[uitableview alloc] initwithframe:cgrectmake(0, 64, self.view.bounds.size.width, self.view.bounds.size.height-64) style:uitableviewstyleplain];
    self.tableview.delegate = self;
    self.tableview.datasource = self;
    [self.view addsubview:self.tableview];

    uiview *view = [[uiview alloc] initwithframe:cgrectmake(0, self.view.bounds.size.height-50, self.view.bounds.size.width, 50)];
    view.backgroundcolor = [uicolor redcolor];
    [self.view insertsubview:view abovesubview:self.tableview];
}

#pragma mark - uitableviewdatasource
- (nsinteger)tableview:(uitableview *)tableview numberofrowsinsection:(nsinteger)section {
    return self.arrayds.count;
}

- (uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath {
    static nsstring * str = nil;
    if ([[[self.arrayds objectatindex:indexpath.row] objectforkey:@"phonenum"] hasprefix:@"100"]) {
        str = @"customcell";
        customtableviewcell * cell = [tableview dequeuereusablecellwithidentifier:str];
        if (cell == nil) {
            cell = [[customtableviewcell alloc] initwithstyle:uitableviewcellstyledefault reuseidentifier:str];
        }
        cell.labelname.text = [[self.arrayds objectatindex:indexpath.row] objectforkey:@"personname"];
        cell.labelnum.text = [[self.arrayds objectatindex:indexpath.row] objectforkey:@"phonenum"];
        return cell;
    } else {
        str = @"systemcell";
        uitableviewcell * cell = [tableview dequeuereusablecellwithidentifier:str];
        if (cell == nil) {
            cell = [[uitableviewcell alloc] initwithstyle:uitableviewcellstyledefault reuseidentifier:str];
        }
        cell.textlabel.text = [[self.arrayds objectatindex:indexpath.row] objectforkey:@"phonenum"];
        return cell;
    }
}

- (void)viewwillappear:(bool)animated {
    [super viewwillappear:animated];
    [self.tableview reloaddata];
}

- (void)tableview:(uitableview *)tableview didselectrowatindexpath:(nsindexpath *)indexpath {
    twoviewcontroller *twovc = [[twoviewcontroller alloc] init];
    [self.navigationcontroller pushviewcontroller:twovc animated:yes];
}

- (cgfloat)tableview:(uitableview *)tableview heightforrowatindexpath:(nsindexpath *)indexpath {
    return 100;
}

@end

自定义表格视图demo(内含plist文件)

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

  • ios uicollectionview实现横向滚动

    现在使用卡片效果的app很多,之前公司让实现一种卡片效果,就写了一篇关于实现卡片的文章。文章最后附有demo实现上我选择了使用uicollectionview ... [阅读全文]
  • iOS UICollectionView实现横向滑动

    本文实例为大家分享了ios uicollectionview实现横向滑动的具体代码,供大家参考,具体内容如下uicollectionview的横向滚动,目前我使... [阅读全文]
  • iOS13适配深色模式(Dark Mode)的实现

    iOS13适配深色模式(Dark Mode)的实现

    好像大概也许是一年前, mac os系统发布了深色模式外观, 看着挺刺激, 时至今日用着也还挺爽的终于, 随着iphone11等新手机的发售, ios 13系统... [阅读全文]
  • ios 使用xcode11 新建项目工程的步骤详解

    ios 使用xcode11 新建项目工程的步骤详解

    xcode11新建项目工程,新增了scenedelegate这个类,转而将原appdelegate负责的对ui生命周期的处理担子接了过来。故此可以理解为:ios... [阅读全文]
  • iOS实现转盘效果

    本文实例为大家分享了ios实现转盘效果的具体代码,供大家参考,具体内容如下demo下载地址: ios转盘效果功能:实现了常用的ios转盘效果,轮盘抽奖效果的实现... [阅读全文]
  • iOS开发实现转盘功能

    本文实例为大家分享了ios实现转盘功能的具体代码,供大家参考,具体内容如下今天给同学们讲解一下一个转盘选号的功能,直接上代码直接看viewcontroller#... [阅读全文]
  • iOS实现轮盘动态效果

    本文实例为大家分享了ios实现轮盘动态效果的具体代码,供大家参考,具体内容如下一个常用的绘图,主要用来打分之类的动画,效果如下。主要是ios的绘图和动画,本来想... [阅读全文]
  • iOS实现九宫格连线手势解锁

    本文实例为大家分享了ios实现九宫格连线手势解锁的具体代码,供大家参考,具体内容如下demo下载地址:效果图:核心代码://// clockview.m// 手... [阅读全文]
  • iOS实现卡片堆叠效果

    本文实例为大家分享了ios实现卡片堆叠效果的具体代码,供大家参考,具体内容如下如图,这就是最终效果。去年安卓5.0发布的时候,当我看到安卓全新的material... [阅读全文]
  • iOS利用余弦函数实现卡片浏览工具

    iOS利用余弦函数实现卡片浏览工具

    本文实例为大家分享了ios利用余弦函数实现卡片浏览工具的具体代码,供大家参考,具体内容如下一、实现效果通过拖拽屏幕实现卡片移动,左右两侧的卡片随着拖动变小,中间... [阅读全文]
验证码:
移动技术网