我正在使用以下代码在我的单元格上创建一个UILabel。 (我知道这个例子是人为的;我甚至无法让这个工作更少地达到我的最终设计目标。)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Photo";
UILabel *username;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
username = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 120.0, 20.0)];
username.tag = USERNAME_TAG;
username.font = [UIFont systemFontOfSize:14.0];
username.textAlignment = UITextAlignmentLeft;
username.textColor = [UIColor blackColor];
username.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight;
[cell.contentView addSubview:username];
} else {
username = (UILabel *)[cell.contentView viewWithTag:USERNAME_TAG];
}
//NSDictionary *photos = [self.photos objectAtIndex:indexPath.row];
username.text = @"Testing!";
return cell;
}
我从here
获得了此模板代码但是,当我运行代码时,单元格中没有文本标签,但附件确实出现了。
答案 0 :(得分:1)
我发现使用自定义xib更容易用于表格单元格,这些表格单元格不容易适用于其中一种常规类型。基本步骤是:使用您的行创建一个xib,创建一个outlet属性,然后在您的cellForRowAtIndexPath方法中,调用loadNibNamed并将其分配给一个局部变量(您返回),并将该出口设置为nil。
秘密在于,使用零出口装入笔尖会导致零出口被初始化并用笔尖的内容充气。
此处描述(滚动到从Nib文件加载自定义表格 - 查看单元格): http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html#//apple_ref/doc/uid/TP40007451-CH7
如果您需要大量的用户交互,那么最好不要对UITableViewCell进行子类化并为其提供自己的xib。如果你在一个单元格上有很多控件,你最终会使用标签来确定事件的来源,这些事件会因多个标签而变得混乱。
答案 1 :(得分:0)
您似乎只是想在UILabel
添加“标准”UITableViewCell
。
以下是您的操作:UITableViewCell
的每个UITableViewCellStyleDefault
都有一个名为textLabel
的属性。在您的代码中,执行以下操作:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Photo";
UILabel *username;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
}
cell.textLabel.text = @"Testing!";
return cell;
}
PS:看起来你正试图在某个时候添加图片?这也是一个属性。请查看imageView
属性的documentation。
答案 2 :(得分:0)
Apple在发布5.0时改变了dequeueReusableCellWithIdentifier
的行为。
在5.0+中,保证始终返回您的单元格的副本(如果它存在于您的xib / storyboard中),即使您还没有加载单元格。在此之前,如果有一个单元已经准备好被回收,它将返回一个单元 。
因此,一些旧的代码假定你将收到零,除非你已经初始化它将会中断。
因此,删除xib / storyboard中的标识符(或整个单元格)或修改逻辑,以便在需要时初始化它(可能基于是否存在具有指定标记的视图)。 / p>