gpt4 book ai didi

swift - 如何为 UITableViewCell TextView 对象实现实时字数统计?

转载 作者:行者123 更新时间:2023-11-28 11:39:01 25 4
gpt4 key购买 nike

在另一个 View 中,我有这个函数(如下),它根据给定条件对 TextView 对象进行实时字数统计,然后将其显示在标签上。我想为我的 TableView 单元格做同样的事情。然而,这个函数显然不会工作,因为它需要来自单元格的“savedHashtagTextView”( TextView )和“hashtagCount”(标签)字段。我不确定如何进行这项工作。请帮忙 - 我已经坚持了几个小时!

func textViewDidChange(_ textView: UITextView) {
let components = savedHashtagTextView.text.components(separatedBy: "#")
hashtagCount.text = String(components.count)
if hashtagCount.text == "0" {
hashtagCount.text = ""
}
}

最佳答案

您需要使用 UITextViewDelegate 协议(protocol)创建一个自定义 UITableViewCell 对象,以便您可以获取特定 UITableViewCell 的字数 UITextView。此外,您将希望以某种方式将字数发送到 ViewController,以便您可以更新字数 UILabel。您可以通过创建自己的 CustomCellDelegate 协议(protocol)来实现这一点,该协议(protocol)需要一个 updateWordCount() 函数,然后在您的 ViewController 中使用该协议(protocol)。

更新字数后,您现在需要调用 updateWordCount() 函数,该函数位于您的 ViewController 中,使用 CustomCellDelegate 协议(protocol)。

作为示例,您将要执行的操作:

创建一个 CustomCell.swift 文件如下:

// Create the protocol
protocol CustomCellDelegate {
func updateWordCount(count: Int)
}

class CustomCell: UITableViewCell, UITextViewDelegate {
// Your UITextView
@IBOutlet weak var textView: UITextView!
// The cells delegate -- which we will set to self when initiated
var delegate: CustomCellDelegate?

func textViewDidChange(_ textView: UITextView) {
// Get the word count here
let wordCount = 10
// Now we call the delegate to send the wordCount to the ViewController
delegate?.updateWordCount(count: wordCount)
}

override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
textView.delegate = self
}
}

现在在您的 Storyboard中创建自定义单元格并为其使用 CustomCell 类并将其 identifier 设置为“CustomCell”。此外,确保将 UITextView 链接到 CustomCell 类中的 socket 。

现在在包含 UITableViewViewController 中:

// Use the CustomCellDelegate protocol here
class YourViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, CustomCellDelegate {
@IBOutlet weak var wordCountLabel: UILabel!
// This is the function required by the CustomCellDelegate
func updateWordCount(count: Int) {
wordCountLabel.text = "Word Count: \(count)"
}

// Set up the custom Cell
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomCell
// Setup the delegate
cell.delegate = self
return cell
}
}

警告:此代码未经测试,我将其全部写在 StackOverflow 上。可能存在语法错误,但除了一些潜在的语法错误外,这将起作用。

编辑:

根据您的评论,字数统计标签位于单元格中。这意味着我们不再需要 CustomCellDelegate 协议(protocol),并且可以进行一些小的更改以使其正常工作。

自定义单元格.swift:

class CustomCell: UITableViewCell, UITextViewDelegate {
// Your UITextView
@IBOutlet weak var textView: UITextView!
// Your Label
@IBOutlet weak var yourLabel: UILabel!

func textViewDidChange(_ textView: UITextView) {
// Get the word count here
let wordCount = 10
// Change the wordCount labels text
yourLabel.text = "Word Count: \(wordCount)"
}

override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
textView.delegate = self
}
}

确保使用 CustomCell 中的两个导出。

您的ViewController:

class YourViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

// Set up the custom Cell
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomCell
return cell
}
}

关于swift - 如何为 UITableViewCell TextView 对象实现实时字数统计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54227814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com