标签: nscollectionview

双击NSCollectionView

我正在尝试让我的程序识别出使用NSCollectionView进行双击.我尝试过这个指南:http://www.springenwerk.com/2009/12/double-click-and-nscollectionview.html但是当我这样做时,没有任何反应,因为IconViewBox中的委托是null:

h文件:

@interface IconViewBox : NSBox
{
    IBOutlet id delegate;
}
@end
Run Code Online (Sandbox Code Playgroud)

m文件:

@implementation IconViewBox

-(void)mouseDown:(NSEvent *)theEvent {
    [super mouseDown:theEvent];

    // check for click count above one, which we assume means it's a double click
    if([theEvent clickCount] > 1) {
        NSLog(@"double click!");
        if(delegate && [delegate respondsToSelector:@selector(doubleClick:)]) {
            NSLog(@"Runs through here");
            [delegate performSelector:@selector(doubleClick:) withObject:self];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

第二个NSLog永远不会被打印,因为委托是空的.我已经连接了我的nib文件中的所有内容并按照说明操作.有谁知道为什么或替代为什么这样做?

cocoa nscollectionview

5
推荐指数
2
解决办法
2574
查看次数

如何在我的NSCollectionView的视图子类中以编程方式绑定?

我已成功创建了一个NSCollectionView,并在IB中的视图原型中添加了一个标签,绑定到我所代表的对象的属性.我现在想以编程方式创建一个NSButton和NSTextField,其中NSTextField绑定到我表示的对象的属性.单击按钮时,我想显示并隐藏NSTextField.

我遇到的问题是,如果我在视图的initWithCoder方法中为控件添加初始化代码,并且在视图的awakeFromNib中绑定,则绑定不会被连接起来.如果我将我的控件的初始化放在awakeFromNib中,当单击该按钮时,我无法访问视图中的控件(使用NSLog打印时它们为null).

从我可以告诉它看起来问题可能是NSCollectionView的工作方式是,它创建了一个视图实例,然后复制它以了解集合视图中的每个对象的方式.如何获取初始化按钮和绑定以使用原型的副本?

下面是我的初始化代码和我在子类视图的awakeFromNib中的绑定:

SubView.h

@interface SubView : NSView {
    NSButton *button;
    NSTextField *textField;
    IBOutlet NSCollectionViewItem *item; // Connected in IB to my NSCollectionViewItem
}

- (IBAction)buttonClicked:(id)sender;

@end
Run Code Online (Sandbox Code Playgroud)

SubView.m

@implementation SubView

- (id)initWithCoder:(NSCoder *)decoder
{
    id view = [super initWithCoder:decoder];

    button = [[NSButton alloc] initWithFrame:NSMakeRect(50, 95, 100, 20)];
    [button setTitle:@"Begin Editing"];
    [button setTarget:self];
    [button setAction:@selector(buttonClicked:)];
    [self addSubview:button];

    textField = [[NSTextField alloc] initWithFrame:NSMakeRect(10, 10, 100, 75)];
    [self addSubview:textField];

    return(view);
}

- (void)awakeFromNib
{   
        // Bind the textField to the representedObject's name …
Run Code Online (Sandbox Code Playgroud)

cocoa binding objective-c nscollectionview

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

接受NSCollectionView子类中的拖动操作

我已经将NSCollectionView子类化了,我正试图从Finder接收拖动的文件.我正在接收draggingEntered:并返回一个合适的值,但我从未接收过prepareForDragOperation:(在此过程中也没有接收过任何方法).有什么明显的东西我在这里不见了吗?

码:

- (void)awakeFromNib
{
    [self registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]];
}

- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
{
    NSLog(@"entered"); //Happens
    NSPasteboard *pboard;
    NSDragOperation sourceDragMask;

    sourceDragMask = [sender draggingSourceOperationMask];
    pboard = [sender draggingPasteboard];

    if ([[pboard types] containsObject:NSFilenamesPboardType])
    {
        NSLog(@"copy"); //Happens
        return NSDragOperationCopy;
    }

    return NSDragOperationNone;
}

- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender
{
    NSLog(@"prepare"); //Never happens
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

macos cocoa drag-and-drop objective-c nscollectionview

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

Swift中的NSCollectionView选择处理

和斯威夫特一起学习,我整天都在这里,但进展甚微:

需要知道何时选择NSCollectionView中的项目.最终目标是使项目突出显示,并能够使用删除键从集合中删除它.我的NSCollectionView绑定到ArrayController以获取内容并发送选择索引,因此看起来我需要观察ArrayController以进行选择更改,但是在那里看不到任何有用的委托方法.原型视图有一个文本字段.

我在这里和其他地方跟踪了obj-c示例(在Swift中没有找到),但是Swift NSCollectionViewItem没有要覆盖的setSelected方法.它有一个选定的财产.

如何在Swift中选择NSCollectionViewItem时获得通知?

nscollectionview swift

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

如何修复与我的NSCollectionView(Xcode 7.0 beta)相关的'Prototype Segue'

所以我一直想用Swift为OSX编写一个需要Collection View的程序.就像OSX一样,它不使用UICollectionView而是使用NSCollectionView(顺便说一下,如果你知道任何使用Swift的教程,我们将非常感激!).

问题是:我在我的故事板中放了一个'Collection View',使它成为我的初始控制器,并且在创建视图时,它还在故事板上创建了一个NSCollectionViewItem.在Xcode 6中,原型项与故事板的任何其他元素完全无关,但现在在Xcode 7中,它是使用"Prototype Segue"创建的.

问题:当我编译时,我遇到了这个错误:

Unknown segue relationship : Prototype
Run Code Online (Sandbox Code Playgroud)

任何人都知道如何解决它?

在此先感谢,对不起我的英语 - '

macos xcode nscollectionview segue swift

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

10.11 NSCollectionView:"无法在bundle NSBundle中加载nibName:NSCollectionViewItem"

我想根据https://developer.apple.com/library/mac/releasenotes/AppKit/RN-AppKit/#10_11CollectionView使用来自Swift的新API模型的NSCollectionView .由于我更喜欢​​在IB中尽可能多地做,我想使用内容绑定,并在链接页面上按照绑定内容部分到NSCollectionView(自WWDC种子以来新增).

我已经从对象库中将NSCollectionView拖入我的故事板,然后通过连接检查器删除了另外生成的原型 segue,并删除了生成的NSCollectionViewItem.然后,我将Collection View的布局设置为Flow,并将集合视图连接到视图控制器的插座.

接下来,我使用Xcode的视图模板创建了一个单独的.xib文件,并放入必要的视图.我还引入了"Collection View Item"对象.

然后,我调整了视图控制器的viewDidLoad方法,用集合视图注册nib.

override func viewDidLoad() {
    super.viewDidLoad()

    let nib = NSNib(nibNamed: "Item", bundle: nil)!
    collectionView.registerNib(nib, forItemWithIdentifier: "")
}
Run Code Online (Sandbox Code Playgroud)

最后,我将我的数组控制器连接到NSCollectionView的Content绑定.

但是,当我尝试启动应用程序时,会抛出异常:

[NSNib _initWithNibNamed:bundle:options:]无法在bundle NSBundle中加载nibName:NSCollectionViewItem

仅当我的数组具有实际内容时才会发生异常,因此仅当需要实例化CollectionViewItem时.

我在这做错了什么?

示例项目:https://scriptreactor.com/collectionviewtest.zip

macos nib cocoa-bindings nscollectionview xcode7

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

带有页眉和页脚的 NSCollectionView

我需要这样的东西:

在此处输入图片说明

但我的代码是这样做的:

在此处输入图片说明

func collectionView(collectionView: NSCollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> NSView {
    let a = myView()
    if kind == NSCollectionElementKindSectionHeader {
        a.frame = NSMakeRect(0, 0, 1000, 10)
    }
    else if kind == NSCollectionElementKindSectionFooter {
        a.frame = NSMakeRect(0, 0, 1000, 12)
    }
    return a
}

func numberOfSectionsInCollectionView(collectionView: NSCollectionView) -> Int {
    return 3
}

override func numberOfItemsInSection(section: Int) -> Int {
    if section == 0 {
        return 5
    }
    else if section == 1 {
        return 5
    }
    return …
Run Code Online (Sandbox Code Playgroud)

macos cocoa nscollectionview swift xcode7

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

NSCollectionViewFlowLayout - 左对齐

NSCollectionViewFlowLayout生成一个布局,其右边距上的项目对齐,或者,如果容器只有一个项目的宽度,则居中项目.我期待一个对齐选项,例如在委托上,但我没有在文档中找到任何内容.是否需要继承NSCollectionViewFlowLayout才能实现此目的?

layout flow nscollectionview leftalign

4
推荐指数
3
解决办法
1207
查看次数

NSCollectionViewItem永远不会实例化

我在这里有点迷失:我创建了一个像colorPicker一样的按钮:单击它会在弹出框中显示一个collectionView.我首先使用包含视图+ collectionView(嵌入在scrollView + clipView中)的nib fil.东西工作得很好.

由于nib文件非常简单(并且为了提高我在编程方式设计视图时的编码技巧),我决定摆脱nib文件并在代码中编写缺失的部分.问题是,我设法完成工作,除了collectionView的内容.经过深入调查,看来,方法内部:

func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem
Run Code Online (Sandbox Code Playgroud)

这应该是管理数据源的方法

collectionView.makeItem(withIdentifier: String, for: IndexPath)
Run Code Online (Sandbox Code Playgroud)

不起作用.事实上,在:

let item = collectionView.makeItem(withIdentifier: ColorPickerPopover.itemIdentifier, for: indexPath)
Run Code Online (Sandbox Code Playgroud)

item是未初始化的,正如调试器在我介入时说的那样(不是零,未初始化).显然,makeItem方法永远不会从我所创建的子类中实例化任何collectionViewItem.标识符很好,并且调用了collectionView.register函数,就像在nib版本中一样,因为这两个项目在这些点上是相同的.makeItem函数根本不调用我已经子类化的NSCollectionViewItem的loadView方法.

任何线索?

玩笑

macos nscollectionview nscollectionviewitem swift

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

在 macOS 上接受第一次鼠标点击

我试图让 click-though 工作,以便我的应用程序即使在窗口处于非活动状态时也能响应鼠标点击。我有一个带有响应鼠标事件的 NSCollectionView 项目的 collectionView。我尝试将 collectViewItem 使用的视图子类化,并且还子类化了用于 NSCollectionView 的视图。它不起作用。子类视图的代码如下所示:

import Cocoa

class SubclassedView: NSView {

  override func draw(_ dirtyRect: NSRect) {
      super.draw(dirtyRect)
  }

  // adding this override should allow click-through so buttons can be clicked even with an inactive window
  // it doesn't work
  override func acceptsFirstMouse(for event: NSEvent?) -> Bool {
      print("got first mouse")
      return true
  }

  override var acceptsFirstResponder :Bool {
      get {
          return true
      }
  }    
}
Run Code Online (Sandbox Code Playgroud)

有谁知道这里出了什么问题?

macos cocoa subclass nscollectionview swift

3
推荐指数
1
解决办法
977
查看次数