gpt4 book ai didi

ios - 如何在 Swift 中创建自动完成文本字段

转载 作者:IT王子 更新时间:2023-10-29 05:21:55 25 4
gpt4 key购买 nike

我希望能够在 iOS 中创建一个自动完成的文本字段。

我有一个用于选择客户端的表单,其中用户必须使用文本字段选择一次客户端。我想要发生的是,当用户在文本字段上写下前三个字母时,我希望某些服务使用输入的文本运行远程 Web 服务查询,并将查询结果显示为自动完成建议。

以下是我当前的应用程序代码(仅限 iPad)。

   import UIKit

class AddClientViewController: UIViewController, UITextFieldDelegate {

@IBOutlet weak var clientTextField: UITextField!

var foundList = [String]()


override func viewDidLoad() {
super.viewDidLoad()



let listUrlString = "http://bla.com/myTextField.php?field=\(clientTextField)"
let myUrl = NSURL(string: listUrlString);
let request = NSMutableURLRequest(URL:myUrl!);
request.HTTPMethod = "GET";

let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in

if error != nil {
print(error!.localizedDescription)
dispatch_sync(dispatch_get_main_queue(),{
AWLoader.hide()

})

return
}


do {

let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSArray

if let parseJSON = json {


self.foundList = parseJSON as! [String]

}


} catch {

print(error)

}
}

task.resume()
}

这是我的网络服务提供的 json 输出。

["123,John", "343,Smith", "345,April"]

以逗号分隔,第一个参数是客户端ID,第二个参数是客户端名称。 John 是名字,因此它应该出现在自动完成建议中,如果选择它会将 clientTextField 的文本设置为 John

clientTextField 的当前文本内容作为 GET 参数传递到我的网络服务。

我不知道该怎么做。用户可能正在打字但尚未完成,而多个查询可能已经发送。

最佳答案

我在我的应用程序中做了类似的事情来查找联系人。我将伪代码出来,以便您理解这个概念:

1) 捕获终端用户输入文本框的字符

2) 在输入的某些字符数决定查询服务器以返回所有匹配的条目 - 选择您满意的字符数(我选择了大约 3-4 个字符)。更少的返回更多,更多的返回不太明显......取决于你,性能和用户体验的考虑。

3) 把这个服务器查询的结果放到客户端的一个数组中。这将是您的超集,您将从中向用户提供建议。

4) 在文本字段中输入每个后续字符后,您现在将通过此时输入的字符串过滤数组 (array.filter())。5) tableView.reloadData() 针对输入的每个字符处的过滤数组。

6) 我使用 dataFlag 变量来根据用户的操作来确定在 TableView 中显示的数据源。

注意:您只查询一次服务器以尽量减少对性能的影响

// this function is called automatically when the search control get user focus
func updateSearchResults(for searchController: UISearchController) {
let searchBar = searchController.searchBar
if searchBar.text?.range(of: "@") != nil {
self.getUserByEmail(searchBar.text!)
}
if searchController.searchBar.text?.characters.count == 0 && dataFlag != "showParticipants" {
dataFlag = "showInitSearchData"
self.contacts.removeAll()
self.participantTableView.reloadData()
}
if dataFlag == "showInitSearchData" && searchController.searchBar.text?.characters.count == 2 {
self.loadInitialDataSet() {
self.dataFlag = "showFilteredSearchData"
}
}
if dataFlag == "showFilteredSearchData" {
self.filterDataForSearchString()
}

}

// filter results by textfield string
func filterDataForSearchString() {
let searchString = searchController.searchBar.text
self.filteredContacts = self.contacts.filter({
(contact) -> Bool in
let contactText: NSString = "\(contact.givenName) \(contact.familyName)" as NSString

return (contactText.range(of: searchString!, options: NSString.CompareOptions.caseInsensitive).location) != NSNotFound
})

DispatchQueue.main.async {
self.participantTableView.reloadData()
}
}

关于ios - 如何在 Swift 中创建自动完成文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35629285/

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