如何将我的表格视图倒置,以便新添加的单元格出现在顶部而不是按钮?

Posted

技术标签:

【中文标题】如何将我的表格视图倒置,以便新添加的单元格出现在顶部而不是按钮?【英文标题】:How can i turn my tableview upside down so new added cells appear at the top and not the button? 【发布时间】:2017-12-27 10:19:36 【问题描述】:

我有一个问题,希望任何人都可以帮助我。 我正在尝试以某种方式创建我的表格视图,以便将新数据添加到表格视图的顶部而不是底部。如果你看下面的图片,我先输入 a,最后输入 d,但我希望它们的方向相反,这样它们就会出现 d、c、b、a,如果我添加了 e,它会出现在顶部.

我已经尝试过使用

tableViewOutlet.transform = CGAffineTransform(rotationAngle: -(CGFloat)(Double.pi))

and

cell.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi));

只是把我的表格视图和单元格颠倒过来,效果很好!唯一的问题是我的表格视图现在将从屏幕底部开始,当页面填满时,我必须向上滚动而不是向下滚动。

Screenshot of my situation (here)

希望有人能帮帮我,帮帮我!

最好的问候克里斯托弗

【问题讨论】:

您可以每次在 0 索引处添加新对象。 如果您只关心单元格的顺序,通常的做法是为核心数据中的每个实体分配一个NSDate 时间戳(或者正如 SH_Khan 指出的那样,一个增量 ID ),并以此为基础进行排序。如果是 UI 问题,那么它是一个广泛的主题,有多种可能的解决方案。 【参考方案1】:

尝试对数组进行降序排序以将整数值添加到您的模型数组并对其进行降序排序

struct mainItem 

  var id: Int
  var userNumber: String
  var address:String


init(id: Int, userNumber: String, address: String )



    self.id = id
    self.userNumber = userNumber
    self.address = address






var arrRet = [mainItem]()


    arrRet = arrRet.sorted(by: 


        var m1 = Int($0.id)

        var m2 = Int($1.id)


        return m1! > m2!


    )

【讨论】:

嗨汗,我的应用程序使用 coreData,所以我排序的是汽车的实体,其中我有值、日期、价格、升和公里。但是是的,我可以尝试以 int 的形式添加一个 ID,看看我是否可以对其进行排序。去试试,谢谢! 假设您希望数据按排序(正向或反向)顺序,而不是与输入方式相反。例如,如果输入的是 A、G、E、D,这并不意味着需要对任何内容进行排序,只是它应该在表中作为 D、E、G、A。 添加的项目将具有更高的 id,因此降序排序会将其置于单元格顶部 好点。出于某种原因,我完全跳过了添加 ID。【参考方案2】:

因此,假设您无法更改数据的提供方式(即对其进行排序),那么您可以更改访问数据的顺序。

所以改变这个:

let data = dataArray[indexPath.row]

到这里:

let data = dataArray[dataArray.count - indexPath.row + 1]

这样做你只是以相反的方式访问数据数组。

所以我有一个 ["a", "b", "c", "d", "e"] 的测试数据数组,并使用我的方法计算如下:

indexPath.row = 0 --- (5 - 0 - 1) = 4
indexPath.row = 1 --- (5 - 1 - 1) = 3
indexPath.row = 2 --- (5 - 2 - 1) = 2
indexPath.row = 3 --- (5 - 3 - 1) = 1
indexPath.row = 4 --- (5 - 4 - 1) = 0

所以你已经颠倒了你访问数组的顺序。

(不要乱用变换,因为那只会是一个受伤的世界)

【讨论】:

不,数学是正确的,我有一个在 Xcode 中运行的示例。括号没有区别,因为dataArray.count - indexPath.row - 1dataArray.count - (indexPath.row - 1) 相同,(dataArray.count - indexPath.row) - 1 相同。我将使用我正在使用的示例数据更新问题。 (有一条关于数学不正确的评论,但现在已经消失了) indexPath.row 对我来说不是一个值,因为我使用核心数据。当我调用 indexPath.row 我得到 (entity: Bilen; id: 0xd000000000a40000 ; 数据: dato = c; id = 0;公里 = 3;升 = 3;pris = 3; 那我不太明白。我说要更改使用 indexPath.row 的那一行直接来自您链接到的图像作为示例。 这是因为我的数组是汽车的实体,汽车具有不同类型的属性 fx id、行驶公里数等等......当我使用 indexPath.row 时,它只显示给我我在上面的评论中的所有属性......你的方法是有效的,我只需要找出我如何才能获得 indexPath.row 的数字! :) 数组包含的内容无关紧要,因为您只关心该数组中的对象位置(即,您希望数组中的第一项位于表格底部,最后一项位于顶端)。不过,如果你设法让它工作,那很好。【参考方案3】:

您可以使用 Swift 数组的 reversed() 方法。

当用户输入字符串时,你会将它附加到 dataArray:-

var dataArray: [String] = ["a", "b", "c", "d"]
dataArray.append("e")

在 cellForRowAtIndexPath 中:-

let data = dataArray.reversed()[indexPath.row]
cell.textLabel!.text = data

【讨论】:

以上是关于如何将我的表格视图倒置,以便新添加的单元格出现在顶部而不是按钮?的主要内容,如果未能解决你的问题,请参考以下文章

新添加的表格视图单元格在反弹时隐藏

需要使用 Firebase 在表格视图控制器 Xcode 7 中安排显示模式

在表格视图中按下单元格上的按钮时如何创建新单元格

从表格视图中删除一个单元格,删除按钮出现在文本字段后面

在自定义表格视图单元格问题中水平/垂直约束

用户在表格视图控制器中将行/部分添加到静态单元格