博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 表视图(UITableVIew)的使用方法(1)表视图的示例
阅读量:6037 次
发布时间:2019-06-20

本文共 4529 字,大约阅读时间需要 15 分钟。

  表视图继承自UIScrollView,所以有着大多UIScrollView的操作特性,诸如手指控制内容的滚动,内容视图到顶端或者低端时的自动反弹等。配合UINavigationController的导航特性,表视图可以将大量有一定规则顺序的数据,完整的呈现到客户端上。

  一般,开发者可以将UITableView的datasource和delegate对象设置成同一个控制器对象,delegate的回调函数并非强制实现,如果控制器没有特别实现代理回调函数的话,UITableView将用默认的值代替,比如默认无页眉页脚,默认点击UITableViewCell时不做任何处理等。

  但是datasource却不同,想要正常显示一个UITableView,作为datasource的对象需要强制地实现两个回调方法。

-(NSInteger)tableView:(UITableViewView *)tableView numberOfRowsInSection:(NSInteger)section-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

表视图的使用最适合的场景时数据列表,我们以一份恒大足球队的球员名单来做示例,数据存储用苹果程序最喜欢的plist文件格式记录。如下图:

每个球员一共有三个信息:球衣号码,球员名字和角色

在具体工作开展之前,有必要为这个结构声明一个数据模型,代码如下:

HBPlayerInfo.h文件

1 @interface HBPlayerInfo : NSObject2 3 @property (nonatomic,retain)NSString *name;4 @property (nonatomic,retain)NSString *role;5 @property (nonatomic,retain)NSNumber *number;
HBPlayerInfo.m文件 1 @implementation HBPlayerInfo2 3 @synthesize name=_name;4 @synthesize role=_role;5 @synthesize number=_number;

随后在UITableViewControll的子类取名SimpleTabelViewController,对于头文件,声明如下:

//SimpleTableViewContoller.h @interface HBSimpleTableViewController : UITableViewController
{ //数据源 NSArray *_datasource;}@property (nonatomic ,readonly, retain) NSArray *datasource;//数据源赋值-(void)initData;//界面配置-(void)initUI;//UIViewController的标题-(NSString *)title;

头文件声明了2个初始化的方法,对于数据源的初始化内容,有必要现将记录所有队员信息的plist加入到工程中去,并且读取出来,撰写如下代码

1 - (void)viewDidLoad 2 { 3     [super viewDidLoad]; 4      5     // Uncomment the following line to preserve selection between presentations. 6     // self.clearsSelectionOnViewWillAppear = NO; 7      8     // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 9     // self.navigationItem.rightBarButtonItem = self.editButtonItem;10     self.tableView.dataSource=self;11     self.tableView.delegate=self;12     [self initData];13     [self initUI];14     15     self.navigationItem.title=[self title];16 }17 18 -(void)initData19 {20     NSMutableArray *arrPlayer=[NSMutableArray arrayWithCapacity:0];21     NSArray *arrPlist=nil;22     //读取工程中的球员信息plist23     arrPlist=[NSArray arrayWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"hengda" ofType:@"plist"]];24     25     HBPlayerInfo *onePlayer=nil;26     //将信息挨个解析到数据模型中27     for(NSDictionary *onePlayerInfo in arrPlist)28     {29         onePlayer=[[HBPlayerInfo alloc]init];30         onePlayer.name=[onePlayerInfo objectForKey:@"name"];31         onePlayer.role=[onePlayerInfo objectForKey:@"role"];32         onePlayer.number=[onePlayerInfo objectForKey:@"number"];33         [arrPlayer addObject:onePlayer];34     }35     36     //数据的赋值37     if(_datasource!=nil)38     {39         _datasource=nil;40     }41     _datasource=[[NSArray alloc]initWithArray:arrPlayer];42 }43 44 -(void)initUI45 {46     self.tableView.allowsSelection=NO;47 }48 49 -(NSString *)title50 {51     return @"广州恒大俱乐部";52 }53 54 - (void)didReceiveMemoryWarning55 {56     [super didReceiveMemoryWarning];57     // Dispose of any resources that can be recreated.58 }59 60 #pragma mark - Table view data source61 62 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView63 {64 #warning Potentially incomplete method implementation.65     // Return the number of sections.66     return 1;67 }68 69 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section70 {71 #warning Incomplete method implementation.72     // Return the number of rows in the section.73     return  self.datasource.count;74 }75 76 77 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath78 {79     static NSString *CellIdentifier=@"SimpleTableViewCellId";80     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];81     82     // Configure the cell...83     if(cell==nil)84     {85         cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];86     }87     88     //配置Cell的内容89     HBPlayerInfo *onePlayer=[self.datasource objectAtIndex:indexPath.row];90     if (onePlayer) {91         cell.textLabel.text=onePlayer.name;92     }93     //提供UITableView需要的Cell94     return cell;95 }

注:每个UITableCell都拥有一个用作重用的ID,上述代码中我们取名叫SimpleTableViewCellId.当在滚动的过程中需要显示新一行时,新行会使用不显示的旧行的Cell对象修改内容后再次显示。当既要显示的Cell跑进“cellForRowAtIndexPath”回调函数的时候,“dequeueReusableCellWithIdentifier”方法返回的就是第一个Cell对象而不再需要新建内存,开发者只需要在第一个Cell上进行内容的重新配置后即可

效果图:

转载于:https://www.cnblogs.com/haibosoft/p/3668354.html

你可能感兴趣的文章
JMJS系统总结系列----Jquery分页扩展库(五)
查看>>
Excel技巧之——英文大小写转换(转)
查看>>
Google 翻译的妙用
查看>>
算法导论--python--插入排序
查看>>
Hydra用户手册
查看>>
常用的集合
查看>>
Unity3D工程源码目录
查看>>
杀死进程命令
查看>>
cookie 和session 的区别详解
查看>>
浮点数网络传输
查看>>
Mongodb对集合(表)和数据的CRUD操作
查看>>
面向对象类的解析
查看>>
tomcat如何修改发布目录
查看>>
CentOS 5.5 使用 EPEL 和 RPMForge 软件库
查看>>
Damien Katz弃Apache CouchDB,继以Couchbase Server
查看>>
Target runtime Apache Tomcat is not defined.错误解决方法
查看>>
某机字长为32位,存储容量为64MB,若按字节编址.它的寻址范围是多少?
查看>>
VC++ 监视文件(夹)
查看>>
【转】keyCode对照表及JS监听组合按键
查看>>
[Java开发之路](14)反射机制
查看>>