2017-05-10 5 views
0

저는 프로그래밍 방식으로 생성 된 새로운 Swift (3.0) 프레임 워크를 만들고 있습니다 (나머지보기와 마찬가지로). 이 framenwork의 배포 대상이 10.10으로 설정되어 있으며 대리자 metod를 설정할 수없는 이상한 것으로 나타났습니다. 실제로 NSSearchFieldDelegate는 10.11에 availabe로만 나타납니다.NSSearchField 대리인 (요세미티)

확인

class PlistEditor: NSObject, NSOutlineViewDelegate, NSOutlineViewDataSource, NSTextFieldDelegate, NSSearchFieldDelegate { 
var searchField : NSSearchField? 
// more code.. 
init(tabItem: NSTabViewItem, 
     plistPath: String?) { 
     // more code.. 
     let sf = NSSearchField(frame: NSMakeRect(80, 0, 80, 22)) 
     self.searchField? = sf 
     // more code.. 
     super.init() 
     // more code.. 
     if #available(OSX 10.11, *) { 
      self.searchField?.delegate = self 
     } else { 
      // Fallback on earlier versions 

     } 

     // more code 
    } 

는}, 나는 NSTextField있는에서 고유라고 생각하고, 어쩌면 내가 셀에 액세스 할 수 있으며 슈퍼 클래스 대리자를 사용하여 설정하지만, unfurtunately 나는 그것을 할 수있는 방법을 찾을 수 없습니다. 내가 필요한 것은 10.10에서 NSText/NSTextField 알림을 수신 할 수 있어야합니다. 어떻게해야합니까? 편집을 할 plist editor vibrant

error received

: 더 어떻게 만들어 지는지에 대한 정보 플러스 당신이 당신의 클래스가 NSSearchFieldDelegate에 부합되는 것을 선언하는 것을 잊었다

+1

수신중인 오류는 무엇입니까? – dirtydanee

+0

더 많은 정보와 그림을 추가했습니다. – Mike97

답변

1

더 많은 정보를 제공하지 않고, 내가 추측하고 일부 픽트을 추가했습니다.

예를 들어 viewController와 같이 설정하는 방법은 아래 예제를 참조하십시오. 당신은 당신의 vc를위한 확장을 생성하고 그것을 delegate에 따르도록 선언한다.

class SearchViewController: NSViewController { 
    let searchField: NSSearchField? = NSSearchField(frame: .zero) 

    override func viewWillAppear() { 
     super.viewWillAppear() 
     if #available(OSX 10.11, *) { 
      self.searchField?.delegate = self 
     } else { 
      // Fallback on earlier versions 

     } 
    } 
} 

extension SearchViewController: NSSearchFieldDelegate { 
    func searchFieldDidStartSearching(_ sender: NSSearchField) { 
     print("didStart") 
    } 

    func searchFieldDidEndSearching(_ sender: NSSearchField) { 
     print("didEnd") 
    } 
} 

이 편집 :
맥 OS의 이전 버전에서 textDidChange 이벤트를 캡처하려면 NSSearchField를 서브 클래스 화해, textDidChange 함수를 재정의해야합니다. searchField에서 변경이 발생할 때마다 함수가 호출됩니다.

class DLSearchField: NSSearchField { 

    override func textDidChange(_ notification: Notification) { 
     Swift.print("textDidChange") 
    } 
} 
+0

추가 정보가 추가되었지만 배포 대상은 10.10입니다. 어쨌든 그것이 효과가 있다고 생각합니까? 감사합니다. – Mike97

+1

델리게이트를 할당하기 전에'if. # available (OSX 10.11, *)'체크 만 추가하면됩니다. '10.11'보다 높은 모든 것을 처리 할 수 ​​있습니다. – dirtydanee

+0

예, 이미 10.11과 Sierra에서 잘 작동합니다. 어떻게 든 NSTextFieldCell에 도달해야하고 고전적인 NSTextFieldDelegate를 설정해야한다고 생각합니다. 가능하다면. 동정은 예상대로 IB 작업에서하지만 모든 것은 코드에 있습니다. – Mike97