我正在尝试复制iTunes中搜索字段的行为,以查找股票代码和名称.具体来说,当您开始在搜索字段中键入时,会显示带有过滤项的弹出窗口.在大多数情况下,我有这个工作,但我无法复制的是它处理第一响应者的方式
输入三个字符后,我出现了弹出窗口.此时,NSSearchField将失去第一响应者状态,因此我无法继续键入.我想要的行为是能够在弹出窗口后继续键入,如果使用箭头键滚动项目,然后继续键入,您将从搜索字段中的最后一个字符继续.
我尝试的是子类化NSTextView(使用它作为NSSearchField的自定义字段编辑器)和覆盖
- (BOOL)resignFirstResponder
Run Code Online (Sandbox Code Playgroud)
通过简单地返回NO,我可以在弹出框出现后继续输入,但显然我无法选择弹出窗口中的任何项目.所以我尝试了以下操作,如果出现向下箭头或mousedown事件,则返回YES.
@interface SBCustomFieldEditor ()
{
BOOL resignFirstRepond;
}
@end
@implementation SBCustomFieldEditor
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
resignFirstRepond = NO;
}
return self;
}
- (BOOL)resignFirstResponder
{
return resignFirstRepond;
}
- (void)keyDown:(NSEvent *)theEvent
{
if ([theEvent keyCode] == 125) {
resignFirstRepond = YES;
[self resignFirstResponder];
}
[super keyDown:theEvent];
}
- (void)mouseDown:(NSEvent *)theEvent
{
resignFirstRepond = YES;
[self resignFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)
这适用于mousedown事件,但不适用于keydown事件,此外,当用户恢复键入时,这不能解决问题.
有什么建议?
我试图增加NSSegmentedControl的高度,超过25px"常规"控件大小.我将NSSegmentedCell子类化,我明白我有两种方法可以使用.
- (void)drawSegment:(NSInteger)segment
inFrame:(NSRect)frame
withView:(NSView *)controlView
- (void)drawWithFrame:(NSRect)frame
inView:(NSView *)view
Run Code Online (Sandbox Code Playgroud)
如果我在IB中放置一个分段控件,那么在我的NSSegmentedCell子类中覆盖上面的方法.除外,传入的帧和视图基于IB中分段控件的高度.所以,我不知道从哪里开始.
我是否必须继承NSSegmentedControl并在我所需的高度绘制我自己的控件?然后使用NSSegmentedCell子类来处理段?
我正在为我的应用程序构建一本帮助手册,主要是在这里使用苹果的文档,但它看起来有点过时了.在Yosemite OS X 10.10中,apple自己的应用程序有一个可折叠的侧栏,显示帮助包的目录
虽然,侧栏按钮出现在我自己的应用程序上,我不知道如何访问它.有谁知道如何访问这个侧边栏?并为我们自己的应用程序提供内容?
试图将我的头围绕cocoa绑定无法确定此错误的原因
我有一个简单的应用程序,其中,app委托将Managedobjectcontext传递给Window Controller,后者将其传递给视图控制器.与视图关联的nib是一个带有数组控制器的基于视图的表.
我在app委托中启动了一些托管对象,当我运行应用程序时,表中填充了对象但是抛出了以下错误
[_NSControllerArrayProxy firstIndex]:无法识别的选择器发送到实例0x100165510
由于代码很少,不知道如何调试它
我相信答案是否定的,但我想确定.你能编译一个包含swift 3.0框架的swift 2.3应用程序吗?
确定枚举类型数组是否包含特定枚举类型的最佳方法是什么,最重要的是枚举案例具有关联类型
例如,使用以下数据结构,我将如何获得第一个视频
let sections = [OnDemandSectionViewModel]
public struct OnDemandSectionViewModel: AutoEquatable {
public let sectionStyle: SectionHeaderStyle
public let sectionItems: [OnDemandItemType]
public let sectionType: SectionType
}
public enum OnDemandItemType: AutoEquatable {
case video(VideoViewModel)
case button(ButtonViewModel)
case game(GameViewModel)
case collectionGroup(CollectionGroupViewModel)
case clip(ClipViewModel)
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试找到第一个视频,目前,我正在执行以下操作,但是很好奇是否有更好的方法
for section in sections {
for item in section.sectionItems {
switch item {
case .video(let video):
print("This is the first video \(video)")
return
default: break
}
}
Run Code Online (Sandbox Code Playgroud)