如何在表格视图底部添加新行 - 聊天消息

2023-12-06

每次用户键入消息并单击“发送”时,我都会使用以下代码添加新消息。效果很好。但问题是,新消息被插入到表视图的顶部。我希望将其插入底部。

    import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet var messagesTable: UITableView!
    @IBOutlet var messageTextBox: UITextField!

    var messageArray = [String]()

    @IBAction func sendMessage(sender: AnyObject) {

        messageArray.append(messageTextBox.text!)
        messagesTable.reloadData()
        messageTextBox.text = ""

    }


    override func viewDidLoad() {
        super.viewDidLoad()
    }


    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return messageArray.count
    }

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return 80
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {


        //self.messagesTable.contentInset = UIEdgeInsetsMake(messagesTable.frame.height,0,0,0)

        let cell = NSBundle.mainBundle().loadNibNamed("AgentMessageText", owner: self, options: nil)?.first as! AgentMessageText
        cell.messageText.text = messageArray[indexPath.row]
        return cell
    }

}

下面的代码将行插入到底部。但新插入的行位于视点下方。也就是说我们每次都必须滚动才能看到它

self.messagesTable.contentInset = UIEdgeInsetsMake(messagesTable.frame.height,0,0,0)

此问题的常见解决方案是翻转表格视图(使单元格粘在底部),然后翻转单元格以使内容正确定向。

Example:

override func viewDidLoad() {
    super.viewDidLoad()

    //flips the tableview (and all cells) upside down
    messagesTableView.transform = CGAffineTransformMakeScale(1, -1)
}

...

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

   ...

   //flips the cell to appear oriented correctly
   cell.transform = CGAffineTransformMakeScale(1, -1)

对于斯威夫特 4

需要明确的是,对于 Swift 4.0,上述转换函数如下所示

CGAffineTransform(scaleX: 1, y: -1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在表格视图底部添加新行 - 聊天消息 的相关文章

  • iOS 9.3 中的 KVO 被破坏

    这可能是 iOS 9 3 发行版 中的一个可怕的错误 添加单个观察者时 NSUserDefaults standardUserDefaults 我注意到响应方法 observeValueForKeyPath ofObject change
  • iOS - UIBarButtonItem - 后退按钮标题垂直位置不调整

    我正在设置自定义字体UIBarButtonItem对象使用UIAppearance 这工作正常并正确设置字体 但是 我确实需要调整按钮标题的垂直位置以适应新字体的大小 UIBarButtonItem appearance setTitleT
  • 寻找可靠的方法来选择iPhone 13微距相机设备

    我正在使用 objc 开发一个应用程序 我必须选择 iPhone 13 Pro 和 13 Pro Max 中配备的新微距摄像头 目前 我在所有其他设备上选择我的相机 并剪掉此代码 AVCaptureDeviceDiscoverySessio
  • 命令行工具中的框架问题

    在每个人开始向我扔其他堆栈溢出和论坛帖子之前 我把它们都看了 他们都没有帮忙 我有一个简单的 cmd 工具 名为swizzler并想要嵌入SwizzleSrc其中的框架 我已经遵循了所有教程并且堆栈溢出但没有运气 这就是我得到的 Build
  • 如何在气隙 Mac 上安装新的 Apple 全球开发者关系中级证书?

    您可能知道也可能不知道 现在使用新的中间证书生成新的签名证书 你可以在这里读到它 https developer apple com support wwdr intermediate certificate https developer
  • 如何在ios开发中从mp3文件中提取元数据

    我正在开发一个带有云存储的 ios 音乐播放器 我需要提取音乐信息 如标题 艺术家 艺术作品 我有一个名为 playit 的操作 可以播放和暂停 mp3 文件 它还应该使用与 mp3 文件关联的元数据来填充一些 UILables 和 UII
  • 为什么我需要 2 个或更多核心数据模型?

    我很想知道谁使用多个核心数据模型以及为什么 有什么好处 我正在开发一个应用程序 我认为我可以从多个模型中受益 但我不确定其他好处 我即将推出的应用程序将适用于 iPad 和 iPhone 的另一个版本 iPad 有 3 个主要内容 iPho
  • ios GPUImage,小尺寸图像处理效果不好?

    我正在尝试为 OCR 准备图像 我使用 GPUImage 来完成 代码工作正常 直到我裁剪图像 裁剪后我得到了糟糕的结果 作物面积 https www dropbox com s e3mlp25sl6m55yk IMG 0709 PNG h
  • 如何在禁用状态下更改 UIButton 图像 alpha?

    我有一个带有图像的 UIButton 在其禁用状态下 该图像应具有 0 3 alpha UIButton button UIButton buttonWithType UIButtonTypeCustom UIImage arrowImag
  • iOS9 Swift 文件使用 NSURL 创建 NSFileManager.createDirectoryAtPath

    在iOS9之前 我们创建了一个像这样的目录 let documentsPath NSSearchPathForDirectoriesInDomains DocumentDirectory UserDomainMask true 0 as S
  • 如何获得 UICollectionView 的矩形

    我想在 UICollectionView 中找到节标题的框架 我对 UITableView 也有类似的情况 为此 我能够通过执行以下操作来获得其正确性 CGRect rect self tableView rectForHeaderInSe
  • 如何在 Swift 中使用函数数组

    我已经阅读了我可以在这里找到的所有关于函数数组的帖子 太棒了 你能做到 我估计 但没有一篇文章实际上展示了如何使用它们 至少不是我想要做的 这就是我想要的 它们都可以采用相同的参数 但这不是必需的 这篇文章很接近 将允许我循环执行每个函数
  • 从应用程序打开/关闭 iPhone 的 Wifi

    我需要打开或关闭 iPhone 中的 wifi 有什么方法可以做到吗 还是被禁止了 私有框架 所有使用公共 SDK 编写的应用程序都经过沙箱处理 他们只能访问苹果认为可以在该沙箱中使用的属性和数据 恐怕 Wi fi 不在列表中 请看一下这个
  • -[_SwiftValueencodeWithCoder:]:无法识别的选择器发送到实例

    尝试使用 NSCoder 时出现错误 玩家 swift class Player NSObject NSCoding private var playerName String private var playerScore Int pri
  • UnsafeMutablePointer 到具体对象类型

    我怎样才能从UnsafeMutablePointer
  • FIRApp 链接器错误 [“_OBJC_CLASS_$_FIRApp”]

    我已经搜索过 SO 和 Google 但找不到有效的答案 我已经在多个项目中使用了新的 Firebase Cocoapod 但是现在 当将其添加到不同的项目时 我收到以下错误 我正在使用 Xcode 7 3 1 和 cocoapods 1
  • Objective-C 中 NSURL 为 null 而 NSString 是正确的

    我有一个NSString包含一个 url 以及当我分配时NSURL与NSString NSURL 输出 空 这是因为url中有一些非法字符 导致NSURL不编码就无法读取NSString包含网址 NSString u incomingUrl
  • SwiftUI 自动调整底部工作表的大小

    SwiftUI 有很多底部工作表的示例 但是它们都指定了使用 GeometryReader 工作表可以增长到的某种类型的最大高度 我想要的是创建一个底部工作表 其高度仅与其中的内容一样高 我使用首选项键提出了下面的解决方案 但必须有更好的解
  • 在 Swift 中将 xib 分配给 UIView

    在 Objective C 中 它可以在 init 方法中完成 id init self NSBundle mainBundle loadNibNamed ViewBtnWishList owner 0 options nil object
  • 初始化Object中的空字符串?

    有人使用以下方法来初始化 NSstring NSString astring NSString alloc init 我想知道为什么不直接使用 NSString atring nil or NSString astring 没有semant

随机推荐

  • C#中如何通过socket发送文件

    我有服务器和客户端控制台应用程序 它们可以很好地通信并发送一些字符串 这是代码 Server public static void Main try IPAddress ipAd IPAddress Parse 127 0 0 1 Init
  • 使用自定义类加载器加载资源包

    import java io ByteArrayOutputStream import java io File import java io IOException import java io InputStream import ja
  • 启动 PyCharm 时 Dyld 错误消息

    几周来我一直在试图解决这个问题 但仍然陷入困境 我一直在研究它并慢慢获得更多信息 但还无法解决它 我在 Stack Overflow 上读过这些类似的问题 dyld 库未加载 usr local Cellar python 3 7 4 1
  • 如何访问多个文件的内容

    有什么方法可以添加多个文件的内容 然后将组合值放入一个文件中 我目前正在尝试这个 start tr include include all items item input start tr php img start include in
  • 如何从父 javascript 页面访问子 iframe 元素?

    在我的页面中 我有 iframe 代码 当我单击启用框架窗口的特定链接时 它是一个表单 当我提交表单时 我会得到一些隐藏字段值 我如何访问父页面中的这些值 由于您的 iframe src 完整的 url 而不是相对路径 即 app apps
  • 通过Javascript提交带有参数的表单

    下面是我的 Javascript 代码 其中 k 和 m 是 Javascript 变量 function javascriptfunction document forms formname action gotopage php par
  • Sublime Text 插件:添加 python 库

    我正在尝试编写一个 Sublime Text 插件 它可以进行一些 Windows api 调用 我做了一些研究发现这个Python库提供了我需要使用的API 所以 我正在尝试使用这个库 当我在我的 sublime text 插件中添加导入
  • 未捕获的类型错误:无法读取 null 的属性“lastChild”

    h2 Matching Game h2 p Click on the EXTRA face on the left side p
  • 在没有 /bin/bash 命令的情况下运行 docker 容器

    我创建了 docker 容器 sudo docker run it ubuntu bin bash 在我读过的 码头工人书 一书中 只要我们指定的命令 bin bash 正在运行 容器就会运行 我不是用选项 it 创建了终端并且不需要 bi
  • 如何在 angularjs 单元测试中触发 mousemove 事件

    我已经实现了一个使用鼠标事件的 angularjs 指令 单击组件并上下移动鼠标可以更改值 所以我需要知道如何在单元测试中触发 mousemove 事件 我使用 karma jasmine 我想建议在单元测试中当鼠标向上或向下移动时测试此组
  • 如何圆化 Matplotlib 轴脊柱的连接

    这是一个相当简单的问题 我正在创建一个具有多个插入轴的 Matplotlib 图形 我已删除刻度线 以便每个插入轴的插入脊椎以 90 度角相交 但是 当您向该图窗添加图例时 它会添加一个图例对象 该图例对象的每个 边缘 都有稍微圆形的脊柱连
  • Java 中的特定方法有多少字节的字节码?

    我最近读到乔恩 正光的博客巨大的方法 8000 字节的字节码 不是使用 HotSpot 进行 JIT 编译的 所以我的问题是 作为程序员 如何找出特定方法有多少字节的字节码 JIT 编译器似乎当然知道 我可以从 class file 您可以
  • Git忽略目录和目录/*有什么区别?

    我对忽略 git 中目录内容的正确方法感到困惑 假设我有以下目录结构 my project www 1 txt 2 txt gitignore 放置这个有什么区别 www 和这个 www 我问这个问题的原因是 在 git 中 如果目录为空
  • 使用 RegEx 查找 VBA 注释

    我正在尝试使用正则表达式查找所有 VBA 注释 我有一些大部分有效的东西 但有一些例外我无法弄清楚 我正在使用的表达 拿我们的测试代码来说 Working This is a test This should be captured Wor
  • Python/Bokeh - 如何通过使用 Select、回调和 CustomJS/js_on_change 从 dict 中按列值过滤行来更改数据源

    问题应该出在回调函数上 不幸的是 我没有 JS 经验 我从 dataframe js 库中获取了这部分 但它不起作用 我们的想法是建立一个仪表板 其中包含费率 1 和费率 2 的两个图表以及两个费率类别的下拉菜单 import pandas
  • 如何在 HTML 网页中显示客户端计算机上的本地图像

    如何在网络服务器上托管的 HTML 网页中显示放置在客户端计算机上的本地图像 我放置的图像很少C Images文件夹所以路径应该是file C Images 1 jpg for a image 1 jpg 我正在使用代码 img src 在
  • excel vba冻结窗格而不选择

    我在 Excel 中有一个 VBA 脚本 可以冻结 Excel 工作表的窗格 但我很好奇是否可以在不先选择范围的情况下实现这一点 这是我当前的代码 它冻结了第 1 7 行 但使用Range Select ActiveSheet Range
  • 获取编辑元素的删除事件

    我正在尝试模拟 不存在的 更改事件contentEditable元素 但我猜这对于输入元素来说是同样的问题 不幸的是 当用户选择一些文本并从浏览器的上下文菜单中选择 删除 时 我不知道如何获取事件 有什么建议我可以如何得到它吗 修订后的答案
  • Python Regex - 在文本文件中的(多个)表达式之间提取文本

    我是一名 Python 初学者 如果您能帮助我解决文本提取问题 我将非常感激 我想提取文本文件中两个表达式之间的所有文本 字母的开头和结尾 对于两者 字母的开头和结尾都有多种可能的表达式 在列表 letter begin 和 letter
  • 如何在表格视图底部添加新行 - 聊天消息

    每次用户键入消息并单击 发送 时 我都会使用以下代码添加新消息 效果很好 但问题是 新消息被插入到表视图的顶部 我希望将其插入底部 import UIKit class ViewController UIViewController UIT