我在 NSVIewConroller View 上有简单的 NSSearchField。并将 NSSearchFIeld 的委托(delegate)连接到 View Controller 。我已经实现了 NSEarcHFieldDelegate 方法,如下所示:
- (void)searchFieldDidStartSearching:(NSSearchField *)sender NS_AVAILABLE_MAC(10_11);
{
NSLog(@"search field did start: %@", sender.stringValue);
}
- (void)searchFieldDidEndSearching:(NSSearchField *)sender NS_AVAILABLE_MAC(10_11);
{
NSLog(@"search field did end: %@", sender.stringValue);
}
在开始编辑和结束编辑时不会调用这些方法。但是,如果我实现 NSControl 默认委托(delegate),例如 controlTextDidChange:
和 control:textShouldBeginEditing:
将在相应的事件上调用。
为什么不调用 NSSearchFieldDelegate 方法?..
最佳答案
第1步:你的 Controller 类需要继承自NSSearchFieldDelegate
第2步:实现以下2个方法
func searchFieldDidStartSearching(sender: NSSearchField){
print("searchFieldDidStartSearching \(sender.stringValue)")
}
func searchFieldDidEndSearching(sender: NSSearchField){
print("searchFieldDidEndSearching \(sender.stringValue)")
}
第3步:在viewDidLoad、windowDidLoad、awakeFromNib等中将搜索字段的委托(delegate)设置为 View Controller /窗口 Controller 等
self.searchField.delegate = self
工作示例如下
// AppDelegate.swift
// NSSearchFieldDelegateSampleCode
// Created by Debasis Das on 27/05/16.
// Copyright © 2016 Knowstack. All rights reserved.
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate, NSSearchFieldDelegate {
@IBOutlet weak var window: NSWindow!
@IBOutlet weak var searchField:NSSearchField!
func searchFieldDidStartSearching(sender: NSSearchField){
print("searchFieldDidStartSearching \(sender.stringValue)")
}
func searchFieldDidEndSearching(sender: NSSearchField){
print("searchFieldDidEndSearching \(sender.stringValue)")
}
func applicationDidFinishLaunching(aNotification: NSNotification) {
// Insert code here to initialize your application
self.searchField.delegate = self
}
func applicationWillTerminate(aNotification: NSNotification) {
// Insert code here to tear down your application
}
}
关于Cocoa - NSSearchFieldDelegate 方法未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36200956/