iOS UITableView的cellForRowAtIndexPath方法不执行的原因

众所周知,UITableView是非常常用的UI,但是有时候我们会碰到UITableViewUITableViewDataSource协议中cellForRowAtIndexPath不执行的情况,原因有可能如下:

1.tableView的宽度或高度等于0;

在这种情况下numberOfSectionsInTableView和numberOfRowsInSection都执行,而cellForRowAtIndexPath不执行。

2.没有设置tableView的dataSource属性;

发生这种情况的原因有可能是:

(1)自己失误忘了写;
(2)mainTableView.delegate = self;写了两次,就像这样:
mainTableView.delegate = self;
mainTableView.delegate = self;
这就纯属笔误了。
在这种情况下UITableViewDataSource协议中的任何方法都不会执行。

3.numberOfSectionsInTableView方法返回值为0;
在这种情况下numberOfSectionsInTableView会执行,numberOfRowsInSection就不会被执行了。

4.numberOfRowsInSection方法返回0;
在这种情况下cellForRowAtIndexPath不会被执行。

部分测试代码:

#import "ViewController.h"

@interface ViewController ()<UITableViewDelegate,UITableViewDataSource>
{
UITableView *mainTableView;
}
@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

[self initUI];
}

- (void)initUI
{
//高度设置为132是因为不实现UITableViewDelegate中的heightForRowAtIndexPath方法,cell默认高度为44,132 = 44 * 3;
mainTableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 20, 375, 132) style:UITableViewStylePlain];
mainTableView.delegate = self;
mainTableView.dataSource = self;
[self.view addSubview:mainTableView];
}

#pragma mark -- <UITableViewDelegate,UITableViewDataSource>
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
NSLog(@"numberOfSectionsInTableView");
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSLog(@"numberOfRowsInSection");
return 10;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"cellForRowAtIndexPath");
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellID"];
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cellID"];

cell.textLabel.text = [NSString stringWithFormat:@"%ld",indexPath.row];

return cell;
}

时间: 2024-09-18 00:40:45

iOS UITableView的cellForRowAtIndexPath方法不执行的原因的相关文章

ASP.NET中基类Page_Load方法后执行的原因

加载对应Load事件和OnLoad方法,对于这个事件,相信大多数朋友都会比较熟悉,用VS.Net生成的页面中的Page_Load方法就是响应Load事件的方法,对于每一次请求,Load事件都会触发,Page_Load方法也就会执行,相信这也是大多数人了解ASP.Net的第一步. Page_Load方法响应了Load事件,这个事件是在System.Web.WebControl.Control类中定义的(这个类是Page和所有服务器控件的祖宗),并且在OnLoad方法中被触发. 很多人可能碰到过这样

iOS UITableView代理方法详解

IOS UITableView的代理方法详解 一.补充 在上一篇博客中,http://my.oschina.net/u/2340880/blog/404605,我将IOS中tableView(表视图)的一些常用方法总结了一下,这篇将tableView的代理方法作了总结,对上一篇博客进行了补充. 二.UITableViewDataSourc(数据源代理) 1.必须实现的回调方法 返回每个分区的行数 - (NSInteger)tableView:(UITableView *)tableView nu

iOS开发:UITableView基本使用方法

  UITableView基本使用方法 1.首先,Controller需要实现两个delegate ,分别是UITableViewDelegate 和UITableViewDataSource 2.然后 UITableView对象的 delegate要设置为 self. 3.然后就可以实现这些delegate的一些方法拉. (1)- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; 这个方法返回 tableview

iOS UITableView 与 UITableViewController实例详解_IOS

很多应用都会在界面中使用某种列表控件:用户可以选中.删除或重新排列列表中的项目.这些控件其实都是UITableView 对象,可以用来显示一组对象,例如,用户地址薄中的一组人名. UITableView 对象虽然只能显示一行数据,但是没有行数限制. •编写新的应用程序 JXHomepwner 应用 创建应用,填写基本信息 •UITableViewController UITableView 是视图.我们知道 模型-视图-控制器(Model-View-Controller),他是我们必须遵守的一种

ios UITableView封装之下拉-上提-图片异步加载

写在前面 做过移动端开发的人都知道,列表控件是最常用的控件之一.iOS里的列表控件是UITableView,其实Apple的开发人员对于UITableView的设计已经够好的了(简单易用,扩展性非常强等等). 但对于展示逻辑单一的移动端系统软件,你还是能感觉到有些繁琐(或许是程序员天生就有些懒惰的毛病吧). 来看看它到底繁琐在哪儿了.首先,它的使用频率太高了:第二,它通常不是只呈现一下数据就完事了,一般都会跟随下拉刷新.上提加载更多功能,当然通常还要跟网络下载数据.图片打交道:第三,MVC模式是

iOS UITableView 拖动排序实现代码_IOS

UITbableView作为列表展示信息,除了展示的功能,有时还会用到删除,排序等功能,下面就来讲解一下如何实现排序.  排序是当表格进入编辑状态后,在单元格的右侧会出现一个按钮,点击按钮,就可以拖动单元格,移动位置,进行手动排序.  使用系统自带拖动排序功能的步骤:  1.让tableView进入编辑状态,也就是设置它的editing为YES  2.返回编辑模式,也就是实现UITableViewDelegate中的tableview:editingStyleForRowAtIndexPath:

ios下移动文件方法汇总

  这篇文章主要给大家汇总了一下ios下移动文件方法,从简单到复杂,十分的实用,有需要的小伙伴可以参考下. 这段objective c代码用于移动指定路径下的文件 代码如下: if ([fileManager copyItemAtPath:@"FilePath1" toPath:@"FilePath2" error:NULL]) { NSLog(@"Copied successfully"); } 方法二: 使用 NSFileManager: 让

高效的 iOS 应用版本支持方法

本文讲的是高效的 iOS 应用版本支持方法, 极少数应用程序很"奢侈"的只支持最新版本的 iOS. 设置一个较低的部署目标以及基于特定 iOS 版本的代码分支通常是很有必要的.虽然苹果公司的信息有些矛盾,还是有各种办法来完成这个.最近在这条 tweet上看到有人警告说,不要这样做: #define IsIOS7 ([[[[UIDevice currentDevice] systemVersion] substringToIndex:1] intValue]>=7) GitHub

iOS 四种回调方法总结_IOS

最近对做IOS 项目遇到回调,抽空把相关资料整理下,以下是整理内容: 回调 回调就是将一段可执行的代码和一个特定的事件绑定起来.当特定的事件发生时,就会执行这段代码. 在Objective-C中,有四条途径可以实现回调. 目标-动作对 在程序开始定等待前,要求"当时间发生时,向指定的对象发送某个特定的信息".这里接收消息的对象是目标,消息的选择器是动作. 辅助对象 在程序开始等待之前,要求"当时间发生时,向遵守相应协议的辅助对象发送消息".委托对象和数据源是常见的辅