– (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath |
|
我先建议一下, 这个 label 最后不要在 cellForRow 里实例化,可以放在 Cell 里,让 Cell 自己去管理它。
回到这个问题,你在哪里判断的?把 cellForRow 实例化的代码和你判断时用的代码发上来吧。 |
|
把你的问题再完善一下。说明白label是如何创建的。是通过code的方式还是xib的方式。
|
|
这个是自定义的cell。label是在xib里创建的 – (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath |
|
这个是自定义的cell。label是在xib里创建的 – (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath |
|
20分 |
你的 Cell 创建方法有错:
if (cell == nil) { cell = [[MapTableCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CellWithIdentifier]; } 这样 init 的必然是一个和 xib 毫无关系的 cell,你应该 load 一个 xib,从而实例化一个 cell: [[NSBundle mainBundle] loadNibNamed:@”CellXibName” owner:nil options:nil].firstObject 把 CellXibName 换成你自己的。 —————————分隔符————————— 这样虽然可以解决问题,但不用这么麻烦,你试下新的 APIs。 提前注册为 tableView 注册好一个 Cell: [self.tableView registerNib:[UINib nibWithNibName:@”CellXibName” bundle:nil] forCellReuseIdentifier:CELL_IDENTIFIER]; 你就不用担心 cell 是否为 nil 了,如果 cell 为 nil 的话,tableView 会自己创建一个: cell = [tableView dequeueReusableCellWithIdentifier:CELL_IDENTIFIER forIndexPath:indexPath]; 这里虽然是用的复用,但是 tableView 会内部判断是否有可以重用的 cell。 旧的 APIs 方式(虽然自己实例化一个 Cell) 建议就不要用了,麻烦,你用下新的 APIs(其实也不新,iOS 6开始就有了),有问题再发出来。 Have fun! |
20分 |
xib与这些IBOutlet 的插座变量建立连线没有? 还有就是建议使用registerNib, registerClass让系统来托管cell的复用及创建 [self.tableView registerNib:[UINib nibWithNibName:@"MapTableCell" bundle:nil] forCellReuseIdentifier:@"TableCellIdentifier"]; 这样在 cellForRowAtIndexPath 中就可以这样来拿到cell MapTableCell *cell = (MapTableCell *)[tableView dequeueReusableCellWithIdentifier:CellWithIdentifier forIndexPath:indexPath]; 不需要再对cell是否为nil 进行判断。系统当从重用队列中失败会根据你指定的方式(nib or class)来自动创建。 |
O(∩_∩)O谢谢~ |
|
谢谢啦~~ |