如何iOS 编程中使用自定义 TableViewCell

 我来答
打伞鱼Aw
2016-04-30 · TA获得超过7266个赞
知道大有可为答主
回答量:7524
采纳率:90%
帮助的人:1602万
展开全部
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 <uikit uikit.h=""><span class="referer">@interface</span> TableViewController : UITableViewController

@property (nonatomic, strong) NSArray *cellContent;
@property (nonatomic, strong) IBOutlet UITableViewCell *customCell;<span class="referer">@end</span> </uikit>

这个演示中,我们定义一个数组来记录所有cell的内容,还需要如下图那样,设置设置好 customCell的outlet。

现在打开TableViewController.m做出如下更改:
#import "TableViewController.h"<span class="referer">@interface</span> TableViewController ()<span class="referer">@end</span>

@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];
*/
}<span class="referer">@end</span>#import <uikit uikit.h="">
#import "TableViewController.h"<span class="referer">@interface</span> AppDelegate : UIResponder <uiapplicationdelegate> @property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) TableViewController *tableViewController;
@property (strong, nonatomic) UINavigationController *navController;<span class="referer">@end</span> </uiapplicationdelegate></uikit>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.tableViewController = [[TableViewController alloc] initWithStyle:UITableViewStylePlain];
self.tableViewController.title = @"Table View";
self.navController = [[UINavigationController alloc]
initWithRootViewController:self.tableViewController];
[self.window addSubview:self.navController.view];
[self.window makeKeyAndVisible];
return YES;

OK,现在运行程序,特别注意一下tableViewController的默认cell已经被我们的自定义 cell 替代。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
洛神儿儿
2016-06-01 · TA获得超过114个赞
知道答主
回答量:115
采纳率:0%
帮助的人:46.7万
展开全部
创建好tableview后, tableview有个注册cell的api:
[_tableView registerNib:[UINib nibWithNibName:@"自定义cell的文件名" bundle:nil] forCellReuseIdentifier:@"用于复用的自定标识符"];
在tableview:cellForRowAtIndexPath:里面:
MyCell *cell = [tableView dequeueReusableCellWithIdentifier:@"刚刚定义的用于复用的自定标识符"];
//在这里做cell相关的赋值等操作
最后return cell;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乜天沅22
2016-05-20 · 超过21用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:37.9万
展开全部
1、首先要自定义一个TableViewCell,如:
@interface MyTableViewCell :UITableViewCell
@end
其它属性可以随意添加。

2、要在UITableViewDataSource的代理方法里实例化,如:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"cell";
MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
cell = [[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier];
}
cell.textLabel.text = @"自定义Cell";

}
3、要在UITabelViewDelegate的代理方法里设置一个Cell的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 40.0;
}
这样就能使用自定义的Cell了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
数神0
2016-07-17 · TA获得超过2.2万个赞
知道大有可为答主
回答量:3624
采纳率:92%
帮助的人:1085万
展开全部
1、创建一个类,继承于UITableViewCell。名字自己取,如:MyTableViewCell
这样一个自定义的tableCell类就创建成功了。
然后就可以在该类中定义一些自己想要的属性,如Label,Button,Image等,注意属性名不要与UITableViewCell中的属性同名,如imageView、textLabel等都是不行的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阿怪啦啦
2016-07-29
知道答主
回答量:18
采纳率:0%
帮助的人:5.4万
展开全部
//自定义cell中.m文件中关联的属性
@property (weak, nonatomic) IBOutlet UIImageView *backImg;

@property (weak, nonatomic) IBOutlet UILabel *titleLabel;

@property (weak, nonatomic) IBOutlet UILabel *descLabel;
//首先你要自定义一个继承自 tableViewcell类(可以用xib自定义,然后把自定义的xib上的控件关联到自定义的cell上,根据自己提前设定的Model进行赋值)
-(void)setChoiceModel:(ChoiceModel *)choiceModel{

_choiceModel = choiceModel;

_titleLabel.text = choiceModel.title;

_descLabel.text = choiceModel.desc;

[_backImg sd_setImageWithURL:[NSURL URLWithString:choiceModel.imageUrl]];

}
//然后你需要在你使用的地方注册一个你自己定义的cell类,如果你需要
[self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([ChoiceCell class]) bundle:nil] forCellReuseIdentifier:indentifier];
//然后在tableViewController的数据源方法中使用
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
ChoiceCell *cell = [self.tableView dequeueReusableCellWithIdentifier:indentifier forIndexPath:indexPath];

ChoiceModel *model = self.dataArr[indexPath.row];

cell.choiceModel = model;

self.tableView.rowHeight = 430;

return cell;

// 希望能帮到你,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式