[英]Xcode 5.1 UITableView in UIViewController - Custom TableViewCell Outlets are nil
我有一个UITableView作为UIViewController中的子视图。 我没有使用UITableViewController,因为我有一些与tableview无关的其他内容占用了部分屏幕。 我正在使用故事板。 我将tableview设置为插座,viewcontroller是数据源和委托。 如果我在这种情况下使用标准的UITableViewCell,一切运行良好,我可以加载内容。
我需要为此tableview使用自定义UITableViewCell,因此我执行了以下步骤:
[self.tableView registerClass:[SWTableViewCell class] forCellReuseIdentifier:@"Cell"];
cellForRowAtIndexPath:
方法中,将单元格出列并转换为自定义子类: SWTableViewCell *cell = (SWTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"Cell"];
检查时,单元格变量是正确的类型。 它不是UITableViewCell,而是SWTableViewCell。 但没有一个网点人口稠密。 属性存在,但它们是零。 我敢肯定有一个我必须要忘记的联系,但我想不出我在这一点上跳过的任何事情。
这种情况是否可行,或者它是否只能通过IB和故事板工作?
删除呼叫
[self.tableView registerClass:[SWTableViewCell class] forCellReuseIdentifier:@"Cell"];
解决了这个问题。
我不知道这个方法究竟是做什么的,因为我从未使用它,所以我会调查一下。 如果有人有关于某些信息的信息,请告诉我们!
编辑:
因此, registerClass:forCellReuseIdentifier:
背后的想法是它告诉tableView如何创建新的单元格。 这样,如果dequeueReusableCellWithIdentifier:
不返回单元格(如果队列为空),则tableView知道如何创建新单元格,而不需要手动创建一个单元格。
编辑2:
我找到了这个帖子,其中说:
如果使用故事板中的原型创建单元格,则无需注册该类。
只需调用dequeueReusableCellWithReuseIdentifier:
将“激活”tableView的单元重用功能。
所以registerClass:forCellReuseIdentifier:
只有在不使用故事板的情况下手动构建单元格时才会被调用。
以下是一些提示:
基本上可以有3种方法来创建和使用UITableViewCell
:
在storyboard / nib中使用“prototype”单元格
(在UITableView
内的storyboard / nib中创建单元格UI)
您不应该使用 registerClass:forCellReuseIdentifier:
或registerNib:forCellReuseIdentifier:
methods。 UIStoryboard
自己处理它,因为你在storyboard中指定了reuseIdentifier
, tableView
知道哪个cell与哪个reuseIdentifier
相关联。
为tableViewCell
UI使用单独的nib
(当你想在几个tableView
使用相同的tableViewCell
时,这可能是一种方法)
您应该使用registerNib:forCellReuseIdentifier:
方法。
不要使用nib,以编程方式创建tableViewCell
UI
您应该使用registerClass:forCellReuseIdentifier:
方法。
另请注意, registerClass:forCellReuseIdentifier:
和registerNib:forCellReuseIdentifier:
都应该在之前调用(最常见于viewDidLoad
) dequeueReusableCellWithIdentifier:forIndexPath:
方法被调用。 如果为reuseIdentifier
注册了类或nib,则可以保证dequeueReusableCellWithIdentifier:forIndexPath:
返回一个有效的单元格(与dequeueReusableCellWithIdentifier:
不同)。
在您的代码中, Storyboard
为单元格注册了一个带有UI的nib
,但是您调用了registerClass:forCellReuseIdentifier:
使用相同的reuseIdentifier
强制表视图取消注册nib并注册不知道IBOutlet
的类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.