iOS深刻学习(UITableView:系列1-最基本的东西)

这是UITableView博客系列的第一篇,使用xib和arc编码,主要讲解一些UITableView使用过程当中简单的、可是又容易被忽略的东西,并且我会告诉读者,怎样在使用了以后就不再会忘记。设计模式

操做的步骤以下,数组

(1)首先拖一个UITableView控件到xib文件上面,以下图,函数

这没有什么,你们不要太过于惧怕UITableView,它只是一个UI控件,跟UIButton和UILabel没什么不同,能够随意的拖拉。编码

(2)接下来咱们在对应的xxxViewController中实例化这个UITableView对象,这里有一个小技巧须要说明一下,先点击xxxViewController.xib文件,这时候Xcode中显示的就是xib文件的内容,这时候双击xxxViewController.h文件,这时候在小窗口中打开了.h文件,这样就方便了下面的操做。atom

在xxxViewController.xib文件中点,击TableView,点击鼠标右键,将其拖动到小窗口的xxxViewController.h文件中,以下图,spa

(3)释放鼠标,这时候会弹出下面的界面,.net

这里我将UITableView对象命名为theTableView,你能够将其命名为任意的名字,这只是一个变量名称,任意你修改。点击Connect按钮,这样Xcode自动帮咱们在xxxViewController.h文件中生成了property声明,设计

@property (nonatomic, strong) IBOutlet UITableView *theTableView;

这就是使用xib的好处,节省了不少代码,不是吗?代理

(4)这一步骤很重要,设置theTableView的delegate和dataSource为self,在xxxViewController.xib文件中,右键拖动鼠标指向File's Owner,以下图,code

接着会弹出下面的界面,

先点击dataSource,再重复上面的操做,而后点击delegate。这样的界面操做,至关于执行了self.theTableView.delegate = self;和self.theTableView.dataSource = self;语句。我仍是要提醒一下,要两次右键拖动UITableView指向File's Owner,分别设置dataSource和delegate,顺序随便。

(5)上面都是经过xib来设置界面的,这样省去了很多代码,我截图说明了操做的过程。好了,xib拖动基本就是这么多内容,下面是代码实现的细节。

在xxxViewController.m文件中,实现UITableViewControllerDelegate和UITableViewControllerDataSource协议,而且定义一个NSMutableArray实例变量instance variable,命名为_infoArray,

@interface xxxViewController()<UITableViewDelegate,UITableViewDataSource>
{
    NSMutableArray *_infoArray;
}
@end

在-viewDidLoad中初始化_infoArray数组内容,

- (void)viewDidLoad
{
    [super viewDidLoad];
    _infoArray = [[NSMutableArray alloc] initWithObjects:@"Zero",@"One",@"Two",@"Three",@"Four", nil];
}

好了,这个步骤就是设置theTableView的数据源,有人会问数据源是什么,简单来讲数据源就是这个theTableView控件要显示的内容,就像label.text = @"Label内容";,其中@"label内容"字符串就是label控件的数据源。因此咱们能够看到,UITableView是完美的使用了MVC设计模式来实现的,其中xxxViewController担任控制者的角色,theTableView是视图,而这里的_infoArray是数据源,实际上这里的_infoArray并非完整的数据模型,还能够进行更高层次的抽象。

(6)上面咱们服从了UITalbeViewDelegate和UITableViewDataSource协议,那么咱们就须要在xxxViewController中区实现协议中的代理方法,那么有读者会问,UITableView有那么多的代理方法,我老是记不清楚,这里我将告诉你怎么记得清楚,之后也不会遗忘。

在全部的UITableView代理方法中,返回列表行数(NSInteger)设置列表内容(UITableViewCell *)是必不可少的两个代理方法,这两个方法的返回值分别是NSInteger和UITableViewCell *内容,因此咱们只须要记住返回值,而后Xcode就会自动提示咱们须要选择哪一个方法,

例如我想实现返回列表行数的方法,这时候只须要输入- (NSInteger)tableView,这时候Xcode会提示咱们不少的方法,以下图所示,

这时候我选择第二个numberOfRowsInSection:(NSInteger)section方法,而后在里面返回_infoArray的数组个数,以下代码所示,

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [_infoArray count];
}

这样就设置了返回的行数。

接下来我要设置列表显示的内容,咱们知道它的返回值为UITableViewCell *类型,因此我直接这样写,- (UITableViewCell *)tableView,Xcode自动提示我完整的代理方法,以下图所示,

很幸运,返回UITableViewCell *内容的方法只有一个,我不用选择直接按Enter按键就能够了,接着我来实现cellForRowAtIndexPath:(NSIndexPath *)indexPath方法,填充里面的内容,以下代码,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleIdentify = @"SimpleIdentify";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleIdentify];
    if(cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleIdentify];
    }
    cell.textLabel.text = [_infoArray objectAtIndex:indexPath.row];
    return cell;
}

上面的代码全都是我手写输入的,由于我已经记得倒背如流了,算是孰能生巧吧,因此iOS开发,对于一些关键代码,为了避免重复查阅资料,仍是要用心记下来的。那么怎样记忆上面简单可是又容易遗忘的代码呢?我来讲说个人记忆过程吧,首先static NSString *simpleIdentify = @"SimpleIdentify";是设置UITableViewCell的重用标识符,咱们知道UITableView的重用机制比较牛逼的技术,这个之后我会写博客来讲明的,这里再也不多说。接下来我输入代码UITableViewCell *cell = [tableView de];这时候Xcode会自动提示方法列表,以下图,

记住,这里请选择第一个dequeueReusableCellWithIdentifier方法,该方法只有一个NSString *参数,我以前不少次选择了第二个方法,而后程序莫名其妙地cursh了。

接着经过if(cell == nil){}来判断cell是否为空,若是cell为空,则实例化cell对象,代码是cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleIdentify];

而后经过cell.textLabel.text = [_infoArray objectAtIndex:indexPath.row];来设置cell显示的数据源中对应函数的内容,最后经过return cell;返回cell内容。

写完这些代码,咱们运行程序,效果图以下,

好了,这就是UITableView的系列一教程,主要是说明经过xib编码,有哪些关键的步骤;还有几十怎样快速记住UITableView的代理方法。

下面一篇博客,我介绍使用reloadData来刷新界面。

相关文章
相关标签/搜索