Objective c 问题自定义UITableViewCell

Objective c 问题自定义UITableViewCell,objective-c,uitableview,uilabel,Objective C,Uitableview,Uilabel,我正在使用以下代码在我的手机上创建一个UILabel。(我知道这个例子是人为设计的;我甚至无法让它发挥作用,更不用说我的最终设计目标了。) 我从中得到了这个模板代码 但是,当我运行代码时,单元格中没有文本标签,但附件确实显示出来。看起来您只是在尝试向UITableViewCell添加一个“标准”UILabel 您可以这样做:UITableViewCellStyleDefault的每个UITableViewCell都有一个名为textlab的属性。在代码中,执行以下操作: - (UITableVi

我正在使用以下代码在我的手机上创建一个UILabel。(我知道这个例子是人为设计的;我甚至无法让它发挥作用,更不用说我的最终设计目标了。)

我从中得到了这个模板代码


但是,当我运行代码时,单元格中没有文本标签,但附件确实显示出来。

看起来您只是在尝试向
UITableViewCell
添加一个“标准”UILabel

您可以这样做:
UITableViewCellStyleDefault
的每个
UITableViewCell
都有一个名为
textlab
的属性。在代码中,执行以下操作:

- (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
属性的属性。

我发现,对于不容易使用普通类型的表格单元格,使用自定义xib要容易得多。基本步骤是:使用您的行创建一个xib,创建一个outlet属性,然后在cellForRowAtIndexPath方法中,调用loadNibNamed并将其分配给一个局部变量(返回),然后将outlet设置回nil

秘密在于,用nil出口加载nib会导致nil出口被初始化,并用nib的内容进行充气

此处介绍(滚动至从Nib文件加载自定义表格视图单元格):


如果您需要大量的用户交互,那么最好对UITableViewCell进行子分类,并为其提供自己的xib。如果你在一个单元格上有很多控件,那么你最终会使用标记来确定事件的来源,这会因为标记太多而变得混乱。

Apple在发布5.0时更改了
dequeueReusableCellWithIdentifier
的行为

在5.0+版本中,即使尚未加载单元格,也保证始终返回单元格的副本(如果它存在于xib/情节提要中)。在此之前,它只会返回一个准备回收的单元格

正因为如此,一些旧的代码(假设您将收到nil,除非您已经初始化它)将中断


因此,去掉xib/情节提要中的标识符(或整个单元格),或者修改逻辑,以便在需要时对其进行初始化(可能基于是否存在具有指定标记的视图)。

最终,我需要比默认的
UITableViewCell
复杂得多的东西。更具体地说,我最终将有3个
UILabels
、一个
UITextView
和一个
UIImage
。我需要手动放置它们以获得我想要的UI。所以我不能使用默认属性。我举了这个例子,只是为了让大家明白我的意思;我需要先设置一个UILabel,然后才能执行其余操作。在这种情况下,您可能需要创建一个自定义UITableViewCell子类,并在其中布局子视图。为每个标签指定一个属性,该属性可由呈现单元的UITableView访问,并将布局留给子类。这将允许您在多个位置使用此单元格,并保持UITableViewDelegate代码干净。还有,为什么投票被否决了呢?
cellforrowatinexpath
甚至被调用了吗?是的,我刚刚添加了
cell.textlab.text=@“愚蠢”下面
cell.username.text=@“测试!”成功了。在您的xib/故事板中是否有一个
UITableViewCell
表格是从中加载的,其中包含单元格标识符照片?如果是这样的话,
If(cell==nil){
代码将永远不会被调用。呃,你完全正确。苹果为什么这样写文档…?看起来它永远不会工作?添加一个答案,我会给你的。+1我同意将其放在xib中,而不是按程序进行布局。
- (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;
}