单元格属性返回零

时间:2015-05-12 09:44:51

标签: ios objective-c iphone uitableview

我创建了一个名为GateCell的自定义UITableViewCell,在其中我放置了一个标签和一个文本字段。
GateCell.h

@property (weak, nonatomic) IBOutlet UILabel *gateLabel;
@property (weak, nonatomic) IBOutlet UITextField *gateTextField;

GateTableViewController

- (void)viewDidLoad {
    [self.tableView registerClass:[GateCell class] forCellReuseIdentifier:@"cellIdentifier"];
}

最后在cellForRowAtIndexPath方法中,我像这样使用

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    GateCell *cell = (GateCell *)[tableView dequeueReusableCellWithIdentifier:@"cellIdentifier"];
    cell.gateLabel.text = @"Gate";
    cell.gateTextField.text = @"Open Gate"
    return cell;
}

当我打印单元格的描述时,我得到以下内容..

<`GateCell`: 0x7b6bd790; baseClass = `UITableViewCell`; frame = (0 0; 320 44); layer = <CALayer: 0x7b6c2e60>> <br>

打印细胞的描述 - > _gateLabel:

  

打印单元格的说明 - > _gateTextField:

  

为什么label和textField在创建单元格时返回nil

3 个答案:

答案 0 :(得分:0)

首先确保您从界面构建器连接IBOutlet。如果没有,则连接IBOutlet。 获取单元格使用以下

UITableViewCell *cell = [tableView      dequeueReusableCellWithIdentifier:@"cellReuseIdentifier"];

答案 1 :(得分:0)

我在registerClass:forCellReuseIdentifier:执行dequeueReusableCellWithIdentifier: tableView:cellForRowAtIndexPath:时遇到了麻烦。

dequeueReusableCellWithIdentifier:发布以来,我不得不替换registerClass:forCellReuseIdentifier:并直接替换init单元格。

tableView:cellForRowAtIndexPath:方式试用

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    //Create your custom cell GateCell the way it has to be done providing the 'reuseIdentifier'
    //With a standard UITableViewCell it should be :
    //UITableViewCell* cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cellIdentifier"];
    GateCell *cell = [[GateCell alloc] init];

    cell.gateLabel.text = @"Gate";
    cell.gateTextField.text = @"Open Gate"
    return cell;
}

答案 2 :(得分:-1)

致电

[self.tableView registerClass:[GateCell class] forCellReuseIdentifier:@"cellIdentifier"];

表视图将直接创建一个单元格,而不是来自NIB文件,因此不会设置IBOutlets(无处可设置)。

您应该注册NIB而不是类,或者您应该在initWithStyle:reuseIdentifier:中创建子视图。

您的其他评论表明您正在使用故事板。在这种情况下,您应该将在storyboard中添加的单元格的类设置为GateCell,并将单元格标识符设置为cellIdentifier。然后,在代码中,您应该删除对[self.tableView registerClass:[GateCell class] forCellReuseIdentifier:@"cellIdentifier"];的调用,因为该调用正在取代故事板注册......