在UITableViewCell中加载UIView

时间:2014-12-15 01:08:38

标签: ios objective-c uitableview

我在创建自定义tableview时遇到了一个有趣的问题......

我发现了这个question,但它并没有真正解决我的问题......

我试图将子类UIView放在子类UITableViewCell中。自定义视图包含UIButton和几个标签。简化,就像这样:

image of view hierarchy

自定义视图和自定义tableviewcell都有xib。

MyCustomView.xib的类设置为MyCustomView,我有标签和按钮的属性以及按钮的IBAction。

MyCustomTableView.xib具有MyCustomView的属性,并且正在导入MyCustomView.h。

在MyCustomView.xib中,我有这个init:

-(id)initWithNibName:(NSString *)nibName nibBundle:(NSBundle *)nibBundle myLabelText:(NSString *)labelText {
    //The custom view in the tableviewcell is 69 by 64...
    if ((self = [super initWithFrame:CGRectMake(0, 0, 69, 64)])) {
        [self setmyLabelText:labelText];
    }
    return self;
}

在我的TableViewController中......

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    MyCustomTableViewCell *cell = (MyCustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"theCell" forIndexPath:indexPath];

    // Configure the cell...
    cell.customView = [[MyCustomView alloc] initWithNibName:@"MyCustomView" nibBundle:nil fileContentID:@"Some Text..."];

    return cell;
}

当我运行应用程序时,自定义tableview单元格的内容很好,但自定义tableview单元格内的自定义视图的内容为空。

2 个答案:

答案 0 :(得分:1)

似乎MyCustomView的初始化程序(-initWithNibName:nibBundle:myLabelText :)不加载任何xib。 这篇文章将对你有所帮助。

How to load a xib file in a UIView

... MyCustomView应该在MyCustomTableViewCell中创建一次,正如@rdelmar所说。

答案 1 :(得分:0)

你需要在MyCustomTableViewCell中完成大部分格式化工作 - 我不会使用XIB直接编写视图,因为该类被多次调用。 Apple有许多关于TableViewCells的示例代码 - 我相信其中一个称为Elements,它使用花式tableview单元格作为元素周期表。我的大多数应用程序都使用带有图标图像的自定义单元格,而且多年前我就开始使用该示例代码(自IOS 4起)。

您的CellForRowatIndexPath应该只是将图像和标签文本传递给tableviewCell类实例。如果你有问题,请问 - 但我确信来自apple的示例代码足以让你入门。