在不使用uitableviewcontroller的情况下对uitableview单元进行子类化

时间:2015-03-04 12:12:34

标签: ios objective-c uitableview

我正在尝试子类uitableviewcell。

起初我使用uitableviewcontroller没有任何问题,一切正常

好。问题是我无法插入uitableview的静态视图顶部。所以我

开始使用uiview + uitableview。我将委托和数据源设置为我的uitable

但是当我尝试编译我的解决方案时,我收到了这个错误:

2015-03-04 15:00:53.087 News[7410:750801] *** Assertion failure in -[SubcategoryTableViewCell _setHostsLayoutEngine:], /SourceCache/UIKit/UIKit-3318.16.14/NSLayoutConstraint_UIKitAdditions.m:2760
2015-03-04 15:00:58.132 News[7410:750801] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Must translate autoresizing mask into constraints to have _setHostsLayoutEngine:YES.'
*** First throw call stack:
(0x182b59e48 0x19324c0e4 0x182b59d08 0x1839dd554 0x1873d6088 0x1873df4f0 0x1876f3c60 0x18771475c 0x1877eccc8 0x1877ecc68 0x1877ec984 0x1875c96f8 0x187832244 0x1877eccc8 0x1877ecc68 0x1877ec984 0x1875c96f8 0x1876f3c44 0x18771475c 0x1877eccc8 0x1877ec984 0x187714264 0x1877eccc8 0x1877ecc68 0x1877ec984 0x1877136ec 0x187446cac 0x1000292e8 0x187421854 0x1873e369c 0x1873e58f0 0x1873e582c 0x1873e5178 0x10003ad30 0x100344e30 0x100344df0 0x10034975c 0x182b116a0 0x182b0f748 0x182a3d1f4 0x18bbd35a4 0x18736e784 0x100029bf4 0x1938baa08)
libc++abi.dylib: terminating with uncaught exception of type NSException

这部分代码:

- (SubcategoryTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *reuseIdentifier = @"PlaceholderCell2";
    SubcategoryTableViewCell * sctvCell = [self.tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
    if (sctvCell == nil) {
        sctvCell= [[SubcategoryTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier]; 
    }

在故事板中,我将我的uitableviewcell设置为我的手机课程。它的工作原理

与uitableview控制器完美配合。

这是我的类和子类代码:

weird behavior on dynamic uitableviewcell height

2 个答案:

答案 0 :(得分:2)

  

好。问题是我无法插入uitableview的静态视图顶部。

有几种解决方法。

  1. 将静态视图放在window[self.tableView.window addSubview:staticView])上。在表视图控制器消失之前,您需要管理静态视图的删除。

  2. 拥有一个具有静态视图的外部视图控制器。外部视图控制器在容器视图中具有表视图控制器。


  3. 回到您当前的问题。当您将表视图控制器换成常规视图控制器时,您是否重建了故事板?简单地交换类型会导致错误。

答案 1 :(得分:0)

我遇到了类似布局约束的问题。修改你的UITableViewCell类构造函数,如下所示。

    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
    {
        self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
        if (self) {
            self.translatesAutoresizingMaskIntoConstraints = NO;
        // Your initializations here
    }
    return self;
    }