mapkit自动完成与组合框

时间:2017-09-06 08:29:49

标签: swift macos cocoa combobox autocomplete

早上好,

我使用swift 4 for osx并尝试实现“地址自动完成组合框”

这意味着: 用户开始键入地址,组合框应显示可能的地址:

我试过了:

    import Cartesian from './cartesian'

    //Somewhere inside the App.js component:
         <div id="graph">
         </div>
    ReactDOM.render(<Cartesian/>,document.getElementById("graph"));

我的打印结果:

@IBOutlet weak var cbSourceAddress: NSComboBox!
var searchCompleter = MKLocalSearchCompleter()
    var searchResults = [MKLocalSearchCompletion]()
    var cbData = [String]()


    func numberOfItems(in comboBox: NSComboBox) -> Int {
        return cbData.count
    }


    func comboBox(_ comboBox: NSComboBox, objectValueForItemAt index: Int) -> Any? {
        return cbData[index] as AnyObject
    }



    // 1
    func comboBox(_ comboBox: NSComboBox, completedString string: String) -> String? {

        searchCompleter.queryFragment = cbSourceAddress.stringValue

        for data in cbData {
            if string.characters.count < data.characters.count{
                let statePartialStr = data.lowercased()[data.lowercased().startIndex..<data.lowercased().index(data.lowercased().startIndex, offsetBy: string.characters.count)]
                if statePartialStr.range(of: string.lowercased()) != nil {
                    print(data)
                    return data
                }
            }
        }
        return ""
    }


    // 2
    func completerDidUpdateResults(_ completer: MKLocalSearchCompleter) {
        searchResults = completer.results


        for x in 0 ..< completer.results.count {
          print(searchResults[x])
          cbData.append("\(searchResults[x])")
        }
        cbSourceAddress.reloadData()
    }

如何格式化为“人类优化字符串”? 我的方法是实现自动完成过程的正确方法吗?

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案:print(searchResults[x].title)