Yosemite中的NSSearchField委托

时间:2017-05-10 11:33:58

标签: swift3 nssearchfield

我正在创建一个新的Swift(3.0)framenwork,它涉及使用以其他视图编程方式创建的NSSearchField。 这个framenwork的部署目标设置为10.10,我发现奇怪的是无法为它设置委托方法。事实上,NSSearchFieldDelegate只在10.11 on。

上出现
pm.setAttr (e=True, keyable=True, elem +'.mtoa_constant_lightGroup')
# ---- here ----------------------^

}

好吧,我认为它是NStextField固有的,也许我可以访问单元格并使用超类委托设置,但不幸的是我找不到办法做到这一点。 我需要的是能够在10.10中接收NSText / NSTextField通知。我怎样才能做到这一点? error received

plist editor vibrant

EDITED: 添加了更多关于如何制作加上一些图片的信息

1 个答案:

答案 0 :(得分:1)

如果没有提供更多信息,我猜您忘了宣布您的班级符合NSSearchFieldDelegate

请参阅下面的示例,如何设置它,例如viewController。您只需为您的vc创建一个扩展,并声明它符合该委托。

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")
    }
}

修改
要在早期版本的Mac OS中捕获textDidChange事件,您需要继承NSSearchField并覆盖textDidChange函数。每次在searchField中发生更改时,它都会为您调用该函数。

class DLSearchField: NSSearchField {

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