UITableViewCell类能够显示出各种各样的风格,但有时候我们需要适应不同的显示模式下的显示。今天的文章中,我们将使用table view去显示一系列自定义的cell。
启动Xcode,选择"Create a new Xcode project",然后选择空应用程序模板,点击Next。命名为 CustomCells,然后照下图那样设置。
点击Next,选择项目的存放路径,最后点击Create。
这里需要添加两个文件,UITableViewController以及custom cell对应的xib文件。
Choose File | New > File ,然后添加一个名为 TableViewController 的UITableViewController。
如图:
对于这个controller,我们并不需要xib文件,所以直接点击Next创建。
重新创建文件,这次我们是创建一个空的 xib 文件,如下图:
点击Next,确保Device Family被设置为iPad,再点击Next,在默认路径下保存为 CellNib 文件。
接着打开 CellNib.xib 文件。在上面拖放几个 label:
这里第一个Label的字体大小是27,字体是System Italic。而其他的Label全部都是默认设置。
下一步就是为文本依然是"Label"的Label设置tag。
将第一个大字体的Label设置tag=1,然后设置Address1,Address2,Phone,Cell右边的Label的tag分别为2,3,4,5。
接着需要修改xib的File's Owner的所属类。这里选择为 TableViewController。
打开 TableViewController.h 然后添加这些属性:
#import
@interface TableViewController : UITableViewController
@property (nonatomic, strong) NSArray *cellContent;
@property (nonatomic, strong) IBOutlet UITableViewCell *customCell;
@end
这个演示中,我们定义一个数组来记录所有cell的内容,还需要如下图那样,设置设置好 customCell的outlet。
现在打开TableViewController.m做出如下更改:
#import "TableViewController.h"
@interface TableViewController ()
@end
@implementation TableViewController
@synthesize cellContent, customCell;
- (NSArray *)cellContent
{ cellContent = [[NSArray alloc] initWithObjects:
[NSArray arrayWithObjects:@"Alex Ander",
@"213 4th St.", @"Apt. 17", @"555-555-5555", @"111-111-1111", nil],
[NSArray arrayWithObjects:@"Jane Doe",
@"4 Any Ave.", @"Suite 2", @"123-456-7890", @"098-765-4321", nil],
[NSArray arrayWithObjects:@"Bill Smith",
@"63 Smith Dr.", @"", @"678-765-1236", @"987-234-4987", nil],
[NSArray arrayWithObjects:@"Mike Taylor",
@"3145 Happy Ct.", @"", @"654-321-9871", @"654-385-1594", nil],
[NSArray arrayWithObjects:@"Nancy Young",
@"98 W. 98th St.", @"Apt. 3", @"951-753-9871", @"951-654-3557", nil],
nil];
return cellContent;
}
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Uncomment the following line to preserve selection between presentations.
// self.clearsSelectionOnViewWillAppear = NO;
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
#pragma mark – Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [[self.cellContent objectAtIndex:0] count];
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 149.0f;
}
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.backgroundColor = [UIColor colorWithRed:1 green:1 blue:.75 alpha:1];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"CellNib" owner:self options:nil];
cell = self.customCell;
self.customCell = nil;
}
// Configure the cell…
UILabel *textTarget;
textTarget = (UILabel *)[cell viewWithTag:1]; //name
textTarget.text = [[self.cellContent objectAtIndex:indexPath.row] objectAtIndex:0];
textTarget = (UILabel *)[cell viewWithTag:2]; //addr1
textTarget.text = [[self.cellContent objectAtIndex:indexPath.row] objectAtIndex:1];
textTarget = (UILabel *)[cell viewWithTag:3]; //addr2
textTarget.text = [[self.cellContent objectAtIndex:indexPath.row] objectAtIndex:2];
textTarget = (UILabel *)[cell viewWithTag:4]; //phone
textTarget.text = [[self.cellContent objectAtIndex:indexPath.row] objectAtIndex:3];
textTarget = (UILabel *)[cell viewWithTag:5]; //cellPhone
textTarget.text = [[self.cellContent objectAtIndex:indexPath.row] objectAtIndex:4];
return cell;
}
#pragma mark – Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Navigation logic may go here. Create and push another view controller.
/*
<#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
// …
// Pass the selected object to the new view controller.
[self.navigationController pushViewController:detailViewController animated:YES];
*/
}
@end
OK,现在运行程序,特别注意一下tableViewController的默认cell已经被我们的自定义 cell 替代。
用这种方式创建的 TableViewCell 能够包含任意控件而不仅仅只是Label与Image,也因为Files's Owner属于TableViewController,任何action方法必须先在viewController对应的类中事先定义好,当然这部分就是另一篇文章所谈到的事情了。
温馨提示:内容为网友见解,仅供参考
如何iPad 编程中使用自定义 TableViewCell
将第一个大字体的Label设置tag=1,然后设置Address1,Address2,Phone,Cell右边的Label的tag分别为2,3,4,5。接着需要修改xib的File's Owner的所属类。这里选择为 TableViewController。打开 TableViewController.h 然后添加这些属性:import interface TableViewController : UITableViewController property (non...
iOS想自定义TableView,怎么才能够把自定义的Cell加进去,Cell上的按钮...
关于自定义cell的问题,有两种方法,一种是用nib文件来实现,一种是直接在代码里面写控件。可以看看这个,讲的比较细 http:\/\/blog.csdn.net\/yang8456211\/article\/details\/12790487 cell上的行中有按钮,那么可以在didSelect。。方法中写事件,当点击的时候显示button就好。
如何使用xib自定义UITableViewCell
(1)新建一个空的(Empty)xib文件,File->New,在面板中选择User Interface->Empty,如下图所示:将文件命名为CustomTableViewCell,表示自定义的cell意思。(2)拖动一个TableViewCell到空的(Empty)xib文件中,如下图,(3)修改CustomTableViewCell的高度为90,通过属性面板来设置,如下图,(4)拖...
如何自定义会话列表的cell
1. 在xCode中选择新建-User Interface - Empty XIB。(指定一个有意义的名字最好,本例BaseTableCell)2. 打开新建的这个空XIB文件,将UITableViewCell控件拖放到xib窗口中。3. 添加样式和其他控件到这个cell控件中。(UITextField & UITextView不适用于表格视图单元)4. 打开属性检查器,设置重用标识...
如何在NSTableView中使用自定义的cell
如果你的所有的数据都可以简单的在一个单独的cell中完成,那之要简单的继承NSCell就好。(这里我也不是太明白)。一旦创建了NSCell的子类,就可以创建一个实例,然后将这个实例赋值给NSTableView,通过这个函数:-[NSTableViewColumn setDataCell:(yourCustomCellObject)];以下两点非常重要:1. 对于每一列...
如何自定义会话列表的 cell
0. 可以对所有会话类型自定义cell 1.继承会话列表界面RCConversationListViewController;2.重写-(NSMutableArray *)willReloadTableData:(NSMutableArray *)dataSource方法,modell类型必须设置为model.conversationModelType=RC_CONVERSATION_MODEL_TYPE_CUSTOMIZATION;3.重写 \/\/高度 -(CGFloat)rcConversation...
StoryBoard里面怎么去用自定义得UITableViewCell
1、运行Xcode 4.2,新建一个Single View Application,名称为Custom Cell:2、将图片资源导入到工程。为此,我找了14张50×50的.png图片,名称依次是1、2、……、14,放在一个名为Images的文件夹中。将此文件夹拖到工程中,在弹出的窗口中选中Copy items into…3、创建一个UITableViewCell的子类:...
如何自定义会话列表的 cell
1、可以对所有会话类型自定义 cell 2、继承会话列表界面 RCConversationListViewController;3、重写方法 -(NSMutableArray *)willReloadTableData:(NSMutableArray *)dataSource 注:在该方法内筛选数据源dataSource中具体的会话类型及消息的model,将model 类型必须修改为 model.conversationModelType=RC_...
实际操作-手把手探究tableViewCell上的控件点击事件
1.tableViewCell上的控件触发点击事件 我们都知道,tableViewCell的点击事件,写个“didSelectRowAtIndexPath”方法就能实现行点击效果,经常我们做的是行点击之后页面跳转(push到另一个界面);此时:如果我们在cell上自定义几个控件,然后点击控件,想要实现控件的点击效果,不实现cell的行点击效果:参与测试...
请问如何自定义UITableViewCell的背景颜色
cell.backgroundColor = [UIColor xxxColor];但是有个问题,cell的背景不是直接设置的,而是以第一个cell的背景颜色为基础,所以要修改第一个cell的背景颜色。 int backgoudViewIndex = 8888; [[cell.subviews objectAtIndex:0]setTag:backgoudViewIndex]; NSInteger row1=[indexPath row]; UI...