小编Cor*_*ory的帖子

如何处理第一响应者和NSPopover

我正在尝试复制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事件,此外,当用户恢复键入时,这不能解决问题.

有什么建议?

cocoa nsevent nsresponder nspopover

7
推荐指数
1
解决办法
1849
查看次数

如何更改NSSegmentedControl的高度

我试图增加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子类来处理段?

cocoa nssegmentedcontrol nscell

6
推荐指数
1
解决办法
1063
查看次数

Cocoa App帮助手册的目录(侧栏)

我正在为我的应用程序构建一本帮助手册,主要是在这里使用苹果的文档,但它看起来有点过时了.在Yosemite OS X 10.10中,apple自己的应用程序有一个可折叠的侧栏,显示帮助包的目录

邮件应用帮助手册

虽然,侧栏按钮出现在我自己的应用程序上,我不知道如何访问它.有谁知道如何访问这个侧边栏?并为我们自己的应用程序提供内容?

macos cocoa objective-c

6
推荐指数
1
解决办法
318
查看次数

Cocoa Bindings错误

试图将我的头围绕cocoa绑定无法确定此错误的原因

我有一个简单的应用程序,其中,app委托将Managedobjectcontext传递给Window Controller,后者将其传递给视图控制器.与视图关联的nib是一个带有数组控制器的基于视图的表.

我在app委托中启动了一些托管对象,当我运行应用程序时,表中填充了对象但是抛出了以下错误

[_NSControllerArrayProxy firstIndex]:无法识别的选择器发送到实例0x100165510

由于代码很少,不知道如何调试它

cocoa core-data nsarraycontroller cocoa-bindings

4
推荐指数
1
解决办法
569
查看次数

在Swift 2.3中使用swift 3框架

我相信答案是否定的,但我想确定.你能编译一个包含swift 3.0框架的swift 2.3应用程序吗?

ios swift

4
推荐指数
1
解决办法
1160
查看次数

检查数组是否包含特定的枚举类型

确定枚举类型数组是否包含特定枚举类型的最佳方法是什么,最重要的是枚举案例具有关联类型

例如,使用以下数据结构,我将如何获得第一个视频

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)

enums ios swift

3
推荐指数
2
解决办法
6351
查看次数