如何实现UITableViewCell TextView对象的实时单词计数?

时间:2019-01-17 01:37:59

标签: swift uitableview uitextview

在另一个视图上,我具有此函数(如下),该函数根据给定条件对TextView对象进行实时单词计数,然后将其显示在标签上。我想对我的TableView单元格做同样的事情。但是,此功能显然无法使用,因为它需要从要从中进行计数的单元格中获取“ savedHashtagTextView”(textView)和“ hashtagCount”(label)字段。我不确定确切如何进行这项工作。请帮忙-我已经坚持了几个小时!

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

1 个答案:

答案 0 :(得分:2)

您将要使用class App extends React.Component { constructor(props) { super(props) this.state = { inputvalue : '' } } render() { return ( <div className="hello"> <Input placeholder="Title 1" /> <br/> <Input placeholder="Title 2" /> <br/> <Input placeholder="Title 3" /> <br/> <Input placeholder="Title 4" /> <br/> <button>Get value</button> </div> ) } } class Input extends React.Component { constructor(props) { super(props) this.state = { inputvalue: '' } } handleChange(e) { this.setState({ inputvalue: e.target.value }) } render() { return ( <input type="text" placeholder={this.props.placeholder} value={this.state.inputvalue} onChange={this.handleChange.bind(this)} /> ) } } ReactDOM.render(<App />, document.querySelector("#app")) 协议创建自定义UITableViewCell对象,以便获得特定UITextViewDelegate UITableViewCell的字数。此外,您将需要以某种方式将字数发送到UITextView,以便您可以更新字数ViewController。您可以通过创建自己的UILabel协议(需要一个CustomCellDelegate函数,然后在updateWordCount()中使用此协议)来实现此目的。

更新字数后,您现在要使用ViewController协议调用updateWordCount()中的ViewController函数。

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

按如下所示创建CustomCell.swift文件:

CustomCellDelegate

现在,在情节提要中创建自定义单元格,并为其使用// 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 } } 类,并将其CustomCell设置为“ CustomCell”。另外,请确保将identifier链接到UITextView类中的插座。

现在位于CustomCell中的ViewController中:

UITableView

警告:此代码未经测试,我将其全部写在StackOverflow上。可能会有语法错误,但是除了一些潜在的语法错误之外,这还是可以的。

编辑:

根据您的评论,单词计数标签位于单元格中。这意味着我们不再需要// 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 } } 协议,并且可以进行一些较小的更改以使此工作生效。

CustomCell.swift:

CustomCellDelegate

确保同时使用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