UITableViewCell无法从故事板加载子视图。

6

我认为这里发生了一些奇怪的事情。我有一个原型单元格,其中包含几个标签作为子视图,并使用viewWithTag来查找它们以设置其文本。在同一项目中,我已经做过3次了,所以我不知道可能出了什么问题。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Result Cell";
    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    UILabel *racerNameLabel = (UILabel*) [cell viewWithTag:5002153];
    //more labels ... 
    return cell;
}

如果我设置了断点,racerNameLabel将会是nil且单元格没有子视图:
(lldb) po [[cell contentView] subviews]
    (id) $5 = 0x08161da0 <__NSArrayI 0x8161da0>(

)

这里是Storyboard的片段,显示标签子视图肯定存在。它还显示单元格标识符是正确的。
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="Result Cell" rowHeight="80" id="hGh-MB-iBH">
        <rect key="frame" x="0.0" y="22" width="382" height="80"/>
        <autoresizingMask key="autoresizingMask"/>
        <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
            <rect key="frame" x="0.0" y="0.0" width="382" height="79"/>
            <autoresizingMask key="autoresizingMask"/>
            <subviews>
                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="5002153" contentMode="left" text="Racer Name" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Sf6-ol-OLA">
                    <constraints>
                        <constraint firstAttribute="width" constant="166" id="iI1-0U-gN8"/>
                    </constraints>
                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
                    <color key="highlightedColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                </label>

(请注意,我将标签设置为一个愚蠢的数字,是因为在努力让它工作时感到沮丧)
(请注意,我设置标签为一个愚蠢的数字,是为了在尝试使其工作时感到失望)

如果您创建一个UITableViewCell的子类,并使用IBOutlet,而不是使用标签,那么您可能会发现它更容易使用。 - Michael Kernahan
尝试解决这个UITableViewCell分配问题-单元格不为nil - sunkehappy
@MichaelKernahan创建了一个名为RaceResultCell的单元格子类,使用IBOutlet将标签连接起来,在cellForRowAtIndexPath中更改了位以引用RaceResultCell,但是cell.racerNameLabel的结果又变成了nil。 - Dan2552
@sunkehappy,当解析故事板时,它不应该在后台初始化标签吗? - Dan2552
如果它不在你的故事板中,那么你就不应该alloc/init标签。我知道你可能只是试图让一些东西工作。:S - Michael Kernahan
显示剩余3条评论
1个回答

22

如果您正在使用检查器中输入的标识符注册自定义的UITableViewCell单元格,则可能会出现问题。我曾经遇到过同样的问题,当我在viewDidLoad中删除了注册自定义类的行时,问题得到解决。


哇,这就是答案,但它一点也不讲道理! - Jamie Forrest
谁会想到!!谢谢。 - user1366265
太棒了,你为我节省了好几个小时(我已经在另一个项目上花费了相同的问题...) - Jim75
我的荣幸! :) - Cyupa
@Cyupa 你有什么想法,为什么会发生这种情况? - jarora

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接