UITableView加载显示更多内容

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@end

#import "ViewController.h"

@interface ViewController ()<UITableViewDataSource,UITableViewDelegate>

{

NSMutableArray *dataArray;//uitableview要显示数据

NSMutableArray *moreArray;//加载更多要显示的数据

}

@property (weak, nonatomic) IBOutlet UITableView *myTableView;

@end

@implementation ViewController

#pragma mark - life circle

- (void)viewDidLoad

{

[super viewDidLoad];

[self addObjectToArray];

//这里不需要设置代理,因为已经在storyboard上进行关联

//_myTableView.dataSource=self;

//_myTableView.delegate=self;

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

#pragma mark -UITableViewDataSource

//返回每个setion对应的行数

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

return dataArray.count+1;

}

//返回section数

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

return 1;

}

//返回cell

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

static NSString *[email protected]"Cell";

UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

if (cell==nil)

{

cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];

}

if(indexPath.row==dataArray.count)

{

[email protected]"加载更多more";

}

else

{

cell.textLabel.text=dataArray[indexPath.row];

}

return cell;

}

#pragma mark -UITableViewDataDelegate

//选择行数中的每行

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

if (indexPath.row==dataArray.count)

{

// UITableViewCell *loadMoreCell=[tableView cellForRowAtIndexPath:indexPath];

//[email protected]"加载更多more";

//运用gcd多线程

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

//后台线程

[self loadMore];

dispatch_async(dispatch_get_main_queue(), ^{

//主线程

[self appendTableWith:moreArray];

});

});

[tableView deselectRowAtIndexPath:indexPath animated:YES];

return;

}

}

#pragma mark - private

//重新getter方法

-(NSMutableArray *)dataArray

{

if (dataArray==nil)

{

dataArray=[NSMutableArray array];

}

return dataArray;

}

//刚开始添加10条记录

-(void)addObjectToArray

{

for (int i=0; i<10; i++)

{

[self.dataArray addObject:[NSString stringWithFormat:@"cell %i",i]];

}

}

-(void)loadMore

{

//点击加载更多行 要追加显示的记录数

moreArray=[NSMutableArray array];

for (int i=0; i<10; i++)

{

[moreArray addObject:[NSString stringWithFormat:@"cell ++%i",i]];

}

}

//往tableview里面追加数据

-(void)appendTableWith:(NSMutableArray *)data

{

for (int i=0; i<data.count; i++)

{

//在原有数据的基础上再追加数据

[dataArray addObject:[data objectAtIndex:i]];

}

//把要追加显示的数据插入到指定cell的行中去

NSMutableArray *insertIndexPaths=[NSMutableArray array];

for (int j=0; j<data.count; j++)

{

NSIndexPath *newPath=[NSIndexPath indexPathForRow:[dataArray indexOfObject:[data objectAtIndex:j]] inSection:0];

[insertIndexPaths addObject:newPath];

}

[self.myTableView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationFade];

}

@end

时间: 2024-11-09 02:52:45

UITableView加载显示更多内容的相关文章

浏览器加载显示html页面内容的顺序

我们经常看到浏览器在加载某个页面时,部分内容先显示出来,又有些内容后显示.那么浏览器加载显示html究竟是按什么顺序进行的呢 其实浏览器加载显示html的顺序是按下面的顺序进行的:1.IE下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的.2.在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元素都已经下载完).3.如果遇到语义解释性的标签嵌入文件(JS脚本,CSS样式),那么此时IE的下载过程会启用单独连接进行下载.4.并且在下载后进行解析,解析过

从输入 URL 到页面加载显示完成的过程

前言:"一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?" 这个问题我想大多数人都不会陌生,好像是前端面试题经常会出现的,在此我也好好梳理梳理了一番,总结成这篇文章,希望能对和我一样在前端道路上奋进的小白们有所帮助,一起学习,交流. 我把这个问题拆解成两个过程: 1. 用户输入 url ---> 客户端(浏览器)拿到服务端的数据 2. 浏览器拿到数据 ---> 呈现页面(也就是浏览器工作过程) 搞清楚这两个过程后,我们也算是完整的回答了前言部分所提的问题

一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?

一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了: 1.浏览器补全URL地址 在输入完URL之后,浏览器会自动检查该地址是否完整,例如是否有添加https协议,若发现不完整,会自动补全. 2.向DNS查询IP地址 每个域名都对应一个或多个提供相同服务服务器的 IP 地址,只有知道服务器 IP 地址才能建立连接,所以需要通过 DNS 把域名解析成一个 IP 地址. 3.得到IP地址后,建立连接,进行三次握手 即每次建立连接前,客户端和服务端都要先进行三次对话才开始正式传输内容,三次对

js数据显示在文本框中(页面加载显示和按钮触动显示)

web代码如下: <!DOCTYPE html> <html> <head> <title>jsTest02.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is

在aspx页动态加载ascx页面内容,给GridView控件绑定数据

在aspx页动态加载ascx页面内容 //加载ascx页面内容Control c1 = this.Page.LoadControl("WebUserControl1.ascx");//绑定到aspx页的PlaceHolder控件上PlaceHolder1.Controls.Add(c1); DataSet ds = SqlServerHelpr.GetDataSet("select * from dbo.Table_1");//给GridView控件绑定数据Grid

Skeleton Screen加载占位图(内容出现前显示灰色占位图)的分析与实现

今天有几个好友问了这个叫加载占位图的实现方法,我还在此问题下做了个回答.由于国内对这个的名词是各有各的叫法,所以这里直接用加载占位图来解释.相信很多人都看到过图中这样的加载方式: 这个图是一个国内知名站点的,相比以往的loading圈圈,看起来是不是美观了许多.据说这个Idea是一个谷歌工程师在2013年时想到的.我不喜欢去讨论概念之类.直接用知名站点来通俗易懂的解释: 以往:发起ajax-loading.gif/svg-ajax结果.现在:发起ajax-具有css3动感(比如闪烁)的灰色布局d

WPF MVVM模式下实现ListView下拉显示更多内容

在手机App中,如果有一个展示信息的列表,通常会展示很少一部分,当用户滑动到列表底部时,再加载更多内容.这样有两个好处,提高程序性能,减少网络流量.这篇博客中,将介绍如何在WPF ListView中实现这个功能. 实现思路:为ListView新增一个附加属性,用来绑定当下拉到底部时触发增加列表内容的功能. XAML: <Window.Resources> <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConver

预加载显示图片的艺术

一般情况下网页中的图片都是随文档流依次加载的,什么时候用到则什么时候加载,但是有些时候这样的加载方式往往会影响用户体验,比如鼠标hover变换背景图片的时候,只有鼠标移入才会对变换的图片进行加载,这样就可能会出现片刻的加载空白现象:又比如图片显示后隐藏再显示网站内容等也是同样的道理. 为了在必要的时候增加用户体验,提高网页的交互逼格,这里不得不介绍下图片预加载的艺术啦. 那么什么是图片预加载呢? 道理很简单啦,虽然某些图片一时半会我用不到,但是为了避免使用时出现的措手不及的现象,我还是乖乖把它们

深入理解IOS布局和view加载显示

前言 一个控件从外在特征来说,主要是封装这几点: 交互方式 显示样式 数据使用 对外在特征的封装,能让我们在多种环境下达到 PM 对产品的要求,并且提到代码复用率,使维护工作保持在一个相对较小的范围内:而一个好的控件除了有对外一致的体验之外,还有其内在特征: 灵活性 低耦合 易拓展 易维护 通常特征之间需要做一些取舍,比如灵活性与耦合度,有时候接口越多越能适应各种环境,但是接口越少对外产生的依赖就越少,维护起来也更容易.通常一些前期看起来还不错的代码,往往也会随着时间加深慢慢“成长”,功能的增加