我看到的大多数示例只连接NSSearchField到NSArrayController.问题是我填充了我的NSTableView使用NSTableViewDataSource协议.我想让我NSSearchField搜索给定的NSTableView.有什么方法可以做到这一点,还是应该将我的数据源转换为NSArray控制器?
我创建了一个NSSearchField存储最近搜索列表的列表.搜索字段连接到一个方法,该方法使用键入搜索字段的文本更新窗口中的标签.问题是一旦用户键入搜索字段,标签就会更新,我需要标签不更新,直到用户键入文本然后按Enter键.我可以用典型的方式做到这一点,NSTextField但我想使用它,NSSearchField所以我可以显示最近的搜索.请参阅下面的代码并提供一些建议.谢谢.
接口文件:
#import <Cocoa/Cocoa.h>
@interface AppDelegate : NSObject <NSApplicationDelegate>
@property (assign) IBOutlet NSWindow *window;
@property (weak) IBOutlet NSSearchField *searchField;
@property (weak) IBOutlet NSTextField *textField;
- (IBAction)searchString:(id)sender;
@end
Run Code Online (Sandbox Code Playgroud)
实施文件:
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize window = _window;
@synthesize searchField, textField;
- (void)awakeFromNib {
if ( [searchField respondsToSelector:@selector(setRecentSearches:)] ) {
NSMenu *searchMenu = [[NSMenu alloc] initWithTitle:@"Search Menu"];
[searchMenu setAutoenablesItems:YES];
NSMenuItem *recentsTitleItem = [[NSMenuItem alloc] initWithTitle:@"Recent Searches" action:nil keyEquivalent:@""];
[recentsTitleItem setTag:NSSearchFieldRecentsTitleMenuItemTag];
[searchMenu insertItem:recentsTitleItem atIndex:0];
NSMenuItem *norecentsTitleItem = …Run Code Online (Sandbox Code Playgroud) 我的应用说明,
NSMutableArray一些项目(比如1-50)NSArrayController并将该数组添加/绑定到此arrayControllerNSTableView到我的视图并使用BINDINGS的概念填充它们.NSSearchField通过添加/绑定NSArrayController和searchField来添加并完成应用程序. 我想知道这种方法是否意味着它,我已经搜索但是找不到在NSTableView使用NSArrayController绑定中显示填充数组的方法.
帮帮我.
我需要得到NSSearchField的这种外观

但似乎不可能使用Interface Builder的标准方法设置backgroundColor.我怎么能做到这一点?子类化NSSearchField和NSSearchFieldCell没有帮助,因为在实现我自己的绘制方法时,我放松了所有动画(当你点击搜索字段和图标+文本向左滑动时).
我试图NSSearchField通过单击右侧的清除按钮来清除字段.我无法点击它.
这是我最后发生的事情的屏幕录制:

我使用RND找到的以下代码:
[[[self.SrcFiled cell] cancelButtonCell] setAction:@selector(clearSearchField:)];
[[[self.SrcFiled cell] cancelButtonCell] setTarget:self];
Run Code Online (Sandbox Code Playgroud)
但它不起作用; 我不知道如何解决这个问题.请建议如何解决这个问题.
我试图在他的"核心数据"一书中关注Marcus Zarra.在书中,他制作了一个小样本应用程序,但是当事情无法解决时它没有给予太多帮助......
他首先通过可视化设计三个实体,然后将每个实体的阵列控制器添加到主笔尖.其次,他添加了一个tableview和一些其他可视组件来显示来自阵列控制器的数据.
到目前为止,我已经设法遵循,但现在他为gui添加了一个搜索字段,并将其绑定到与其中一个tableviews相同的数组控制器.在搜索字段中键入时,预期的行为将是tableview被过滤,但没有任何反应.
我如何找出问题所在?
笔尖的相关部分如下:
NSArrayController Recipes
- Mode = Entity
- Enitity Name = RecipeTableView w/TableColumn
- 值绑定到配方
- Controller Key = arrangeObjects - Model Key Path = name搜索字段
- 谓词绑定到配方
- 控制器键= filterPredicate
- 模型键路径=名称
- 显示名称=谓词
- 谓词格式= keyPath包含$ value
控制台中没有相关消息.
问候,
-Vegar
我有一个简单的应用程序,它有一个NSSearchField,我想知道用户是否按下,例如,箭头键.我不想继承子类,因为我想在我的应用程序中修改IBOutlets的值,而我不能在子类中这样做.
编辑
keyUp:我在NSSearchField子类中重写的方法是:
-(void)keyUp:(NSEvent*)event
{
if ([event keyCode]==36){
customers* c= [[customers alloc] init];//customers is the class where i have my IBOulets and my methods
[[self window] selectKeyViewFollowingView:self];// change the first responder
[c searcht:[self stringValue]];//here i want to call a method to make a query and change the stringValues of some IBOulets
}
}
Run Code Online (Sandbox Code Playgroud) 我需要覆盖NSSearchField当您使用"清除"按钮清除字段内容时发生的操作.
默认触发的选择器是私有的:_searchFieldCancel.
[UPDATE]
好的,我找到了解决方案.
但是,如何在单击"清除"按钮时阻止searchField重新启动第一响应者?
我放置NSSearchField并设置其边框none,我发现清除按钮不可点击,点击时没有响应.如果我再次设置边框,它工作正常.
我已经调试了几个小时,并发现当我将边框设置为none时,文本编辑器宽度将展开并阴影(覆盖)清除按钮.
截图
查看层次结构调试截图
重现步骤:
NSSearchField 这是一个错误吗?或者它打算这样做?
注意:新手可可开发
我希望有一个NSTextField(或NSSearchField)的默认值,并在用户单击它时删除此默认值,并在文本视图失去焦点并且文本字段为空时进行设置.像这样:

这听起来像我应该扩展,NSSearchField但我想知道是否有一个更容易的解决方案.
cocoa ×10
nssearchfield ×10
macos ×4
objective-c ×4
nstextfield ×2
xcode ×2
core-data ×1
nscell ×1
nsevent ×1
nstableview ×1
nsview ×1
overriding ×1
swift ×1