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

 我来答
huanglenzhi
2015-08-07 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517196
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
启动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 替代。
千锋教育
2015-12-16 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部
1.新建TableViewCell类,继承父类为UITableViewCell

1.1 "TableCell.h"
#import <UIKit/UIKit.h>

/**
* 房间桌子显示结构
* /
@interface TableCell : UITableViewCell {
    UILabel *tableNoLable; // 桌子号
    UIImageView *tableImageView; // 桌子图片
   UIImageView *tableStateImageView; // 桌子状态图片


@property (nonatomic ,retain) IBOutlet UILabel *tableNoLable;// 桌子号
@property (nonatomic ,retain) IBOutlet UIImageView *tableImageView;// 桌子图片
@property (nonatomic ,retain) IBOutlet UIImageView *tableStateImageView;// 桌子状态图片

1.2 TableCell. m
#import "TableCell.h"
@implementation TableCell
@synthesize tableNoLable; // 桌子号
@synthesize tableImageView; // 桌子图片
@synthesize tableStateImageView; // 桌子状态图片

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
// Initialization code
}
return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

[super setSelected:selected animated:animated];

// Configure the view for the selected state
}

- (void)dealloc {
[tableNoLable release];
[tableImageView release];

[hand3ImageView release];
[super dealloc];
}

@end

1.3 布置布局文件( xib 文件)指明 class 为自己定义的 tabelcellview
new 一个Empty Xib文件,其中不包含view, 在libriary中拖一个UITableCell到两个图标的框中,双击cellview,指明class为cell.m文件,开始编辑

2. 页面中在 tableView 中加载自己的 cell

#import "TableCell.h"

// 设置房间桌子数
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
[Util showLog:@"numberOfRowsInSection"];
return g_Room.wTableCount;
}

// 设置单元格的高度
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
[Util showLog:@"heightForRowAtIndexPath"];
return kTableViewRowHeight;
}

// 设置单元个样式
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
[Util showLog:@"cellForRowAtIndexPath start"];

static NSString *tableCellIdentifier = @"TableCellIdentifier";
TableCell *cell = (TableCell *)[tableView dequeueReusableCellWithIdentifier:tableCellIdentifier];
[Util showLog:@"TableCellIdentifier"];
if(cell == nil){
NSArray *nib = [[NSBundle mainBundle]loadNibNamed:@"TableCell" owner:self options:nil];
for(id oneObject in nib){
if([oneObject isKindOfClass:[TableCell class]]){
cell = (TableCell *)oneObject;

//***** 自己设计每个 cell 的内容,此函数会回调 table 的行数次,行数为 numberOfRowsInSection:(NSInteger)section 函数指定
// 显示桌子号码
NSUInteger row = [indexPath row] + 1;
NSString *str =[NSString stringWithFormat:@"%d",row];
cell.tableNoLable.text = [[@" 第 " stringByAppendingString:str] stringByAppendingString:@" 桌 "];
[Util showLog:@"tableNoLable"];

if(deskshowFlg){
// 获取要绘画的桌子信息
Desk *tempDesk = [g_DeskArray objectAtIndex:[indexPath row]];
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式