2017-09-06 5 views
0

드롭 다운 나는 애플지도와 같은 주소 자동 완성 함수가 실현 싶습니다 이미지가 나타 납니까? 나는 구조가 될 것 같아요 자동 완성 기능 내가 OSX에 대한 빠른 4 일

  • 간단한 NSTextField있는
  • 하지만 팝업 메뉴 무엇인가? 간단한 popover일까요?

UPDATE 지금 내 응용 프로그램은 다음과 같이 작동합니다

enter image description here

화려한 이잖아. 작은 문제 하나 :

텍스트 필드에 첫 번째 문자를 씁니다. 팝업이 표시되고 텍스트 필드가 포커스를 잃었습니다. 이제 텍스트 필드에서 다시 클릭해야합니다. 이 텍스트 필드의 초점을 유지할 수있는 방법이 있습니까?

+0

그것은 팝 오버에있는 ScrollView에있는 TableView입니다. – Moritz

+0

좋아, 이렇게 할 수있는 내 방법은 다음과 같습니다. 텍스트 필드 대리인 텍스트가 변경되었습니다.> 검색 문자열을 사용하여 팝업을 열고 제안을하도록 허용 하시겠습니까? – Ghost108

+0

위임 텍스트는, 다음의 tableview 선택하여 텍스트 필드의 내용 (다시 수행 할 때 테이블을 유발하지 않도록 조심 교체 선택된 행 알고를 keyDown하고있는 tableView 대리자를 모니터링 만들고 팝 오버 테이블보기를 표시, 제안과 배열을 채울> 변화했다) popover를 닫는다. 그것은 많은 작업이지만 가치가 있습니다. 저는 최근의 응용 프로그램에서 이런 종류의 상호 작용을하는 사용자를했습니다. – Moritz

답변

0

은이 같은 상황 해결 :

controlTextDidChange을 사용 팝 오버

제시
override func controlTextDidChange(_ obj: Notification) { 

    vcAddress.searchString = txtSourceAddress.stringValue 
    self.presentViewController(vcAddress, asPopoverRelativeTo: txtSourceAddress.bounds, of: txtSourceAddress, preferredEdge: .maxX, behavior: .semitransient) 

NotificationCenter.default.post(name: NSNotification.Name(rawValue: "AutoComplete"), object: nil) 
} 

팝 오버는 SearchCompleter (MapKit)을 사용해 제안을 얻는있는 TableView를 갖는다

import Cocoa 
import MapKit 

class AcAddress: NSViewController, NSTableViewDelegate, NSTableViewDataSource, MKLocalSearchCompleterDelegate { 

    var searchString:String? 
    var searchCompleter = MKLocalSearchCompleter() 
    var searchResults = [MKLocalSearchCompletion]() 


    @IBOutlet weak var tblAutoComplete: NSTableView! 


    override func viewDidLoad() { 
     NotificationCenter.default.addObserver(self, selector: #selector(AutoComplete), name: NSNotification.Name(rawValue: "AutoComplete"), object: nil) 
     searchCompleter.delegate = self 
     tblAutoComplete.refusesFirstResponder = true 
    } 



    @objc func notificationAutoComplete() { 
     searchCompleter.queryFragment = searchString ?? "" 
    } 

    func completerDidUpdateResults(_ completer: MKLocalSearchCompleter) { 
     searchResults = completer.results 
     tblAutoComplete.reloadData() 
    } 




    func numberOfRows(in tableView: NSTableView) -> Int { 
     return searchResults.count 
    } 



    func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? { 

     // FILL IT 

     } 

    } 
+1

나중에 업데이트하려고합니다. 현재 집에 없습니다. – Ghost108