gpt4 book ai didi

ios - 如何使用 Swift - 在 textView 中自动完成

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

我有一个 textView,用户可以在其中添加评论并提及其他用户。我构建了一个函数,该函数在用户键入符号“@”时触发。所以基本上就像在 Instagram 或 Facebook 中一样,当用户键入“@”时,会出现一个表格 View 并显示用户建议。这是我的功能:

func suggestUser() {
if let searchText = postTextField.text {
let words = searchText.components(separatedBy: .whitespacesAndNewlines)
for var word in words {
if word.hasPrefix("@") {
word = word.trimmingCharacters(in: .punctuationCharacters)
let userToSearch = String(word.dropFirst())
self.viewContainerForTableView.isHidden = false
self.suggestedUsers.removeAll()
self.tableView.reloadData()
Api.User.queryUsersByMentionName(WithText: userToSearch, completion: { (user) in
if !self.suggestedUsers.contains(where: { $0.id == user.id }) {
self.suggestedUsers.append(user)
}
self.tableView.reloadData()
})
} else {
self.viewContainerForTableView.isHidden = true
}
}
}
}

我有两个问题:1)当用户点击 TableView 中的建议用户时,我如何删除他已经输入的文本并添加他选择的文本?让我举个例子:

如果用户在 tableView 中输入@jan,就会出现 janedoe。当用户单击 TableView 中的建议名称时,我如何删除 jan 并添加 janedoe?

这是我的 didSelectRowAt 代码

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let username = suggestedUsers[indexPath.row].username
let usernameToAppend = username.components(separatedBy: .whitespacesAndNewlines).joined()
postTextField.text.append("\(usernameToAppend)")
}

2) 有没有一种方法可以检查用户是否已经在 textView 中输入,因此不在 tableview 中显示?

谢谢!

最佳答案

经过一整天的尝试,我想我找到了解决方案...希望...

所以我为我的 textView 创建了一个扩展:

extension UITextView {

var currentWord : String? {

let beginning = beginningOfDocument

if let start = position(from: beginning, offset: selectedRange.location),
let end = position(from: start, offset: selectedRange.length) {

let textRange = tokenizer.rangeEnclosingPosition(end, with: .word, inDirection: 1)

if let textRange = textRange {
return text(in: textRange)
}
}
return nil
}
}

然后在我的 didSelectRowAt 我有:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let username = suggestedUsers[indexPath.row].username
let usernameToAppend = username.components(separatedBy: .whitespacesAndNewlines).joined()
let currentWord = postTextField.currentWord
if currentWord != nil && currentWord != "@" {
if let countIndex = currentWord?.count {
let count = Int(countIndex)
let startPosition = postTextField.selectedTextRange?.start
let endPosition = postTextField.position(from: startPosition!, offset: -count)
postTextField.selectedTextRange = postTextField.textRange(from: startPosition!, to: endPosition!)
if let range = postTextField.selectedTextRange {
postTextField.replace(range, withText: usernameToAppend)
}
}
} else if currentWord == "@" {
if let range = postTextField.selectedTextRange {
if range.start == range.end {
postTextField.replace(range, withText: usernameToAppend)
}
}
}
}
}

关于ios - 如何使用 Swift - 在 textView 中自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47304405/

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