仅用于表视图第一行的自定义样式

时间:2014-05-18 18:13:11

标签: ios ruby uitableview rubymotion

我正在尝试为表格视图的第一行设置不同的样式。

我通过以下代码执行此操作:

def tableView(table_view, cellForRowAtIndexPath: index_path)
  data_row = @data[index_path.row]
  puts index_path.row
  if index_path.row == 0
    cell = table_view.dequeueReusableCellWithIdentifier(ITEM_CELL_ID) || begin
      rmq.create(ItemCell, :first_cell, reuse_identifier: ITEM_CELL_ID).get
    end
  else
    cell = table_view.dequeueReusableCellWithIdentifier(ITEM_CELL_ID) || begin
      rmq.create(ItemCell, :rest_cell, reuse_identifier: ITEM_CELL_ID).get
    end
  end
  cell.update(data_row)
  cell
end 

问题

然而,我对此感到非常奇怪。第一行确实有自定义样式....但第10行和第20行也是如此!我不知道为什么会这样。第2 - 9行和第11-19行与第0行和第10行和第20行不同。

2 个答案:

答案 0 :(得分:0)

不确定你的方法是如何被调用的,所以也许这是不可能的......但是,我想这是从一个集合中调用的(或者有一个集合涉及堆栈的某个地方)。你能做这样的事吗:

#wherever you're calling this from 
index_paths.each_with_index do |path, i| #add an 'index path'
  tableView(table_view,  cellForRowAtIndexPath: path, i)
  ...
end

#updated original method
def tableView(table_view, cellForRowAtIndexPath: index_path, path_index) #add path index
  data_row = @data[index_path.row]
  puts index_path.row
  if path_index == 0 #add path index
    cell = table_view.dequeueReusableCellWithIdentifier(ITEM_CELL_ID) || begin
      rmq.create(ItemCell, :first_cell, reuse_identifier: ITEM_CELL_ID).get
    end
  else
    cell = table_view.dequeueReusableCellWithIdentifier(ITEM_CELL_ID) || begin
      rmq.create(ItemCell, :rest_cell, reuse_identifier: ITEM_CELL_ID).get
    end
  end
  cell.update(data_row)
  cell
end 

答案 1 :(得分:0)

您需要为每种单元格类型使用不同的ITEM_CELL_ID(reuseIdentifiers)。因此,:first_cell样式化的单元格应该具有与reuseIdentifier样式化单元格不同的:rest_cell常量。这应该可以解决您的问题,因为您所看到的是第一个单元格的内存在表格滚动时反复重复使用。