Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSCollectionView子类不';尽管设置需要显示,但在拖动会话期间不能调用drawRect_Objective C_Cocoa_Drag And Drop_Nscollectionview - Fatal编程技术网

Objective c NSCollectionView子类不';尽管设置需要显示,但在拖动会话期间不能调用drawRect

Objective c NSCollectionView子类不';尽管设置需要显示,但在拖动会话期间不能调用drawRect,objective-c,cocoa,drag-and-drop,nscollectionview,Objective C,Cocoa,Drag And Drop,Nscollectionview,您好 我对NSCollectionView子类中应该如何以及何时调用drawRect感到困惑 我执行拖放操作,以便在集合中移动NSCollectionViewItems,并希望绘制拖放结束位置的视觉指示 该子类在拖动会话期间不调用drawRect。(在滚动过程中确实如此) 这是预定的操作吗? 欢迎提供有关如何正确实现此行为的任何提示 以下代码的完整xcode项目可从以下站点获得: 致意 更新: 示例代码是错误的。调用registerForDraggedTypes,使集合触发器drawRect符

您好

我对NSCollectionView子类中应该如何以及何时调用drawRect感到困惑

我执行拖放操作,以便在集合中移动NSCollectionViewItems,并希望绘制拖放结束位置的视觉指示

该子类在拖动会话期间不调用drawRect。(在滚动过程中确实如此)

这是预定的操作吗? 欢迎提供有关如何正确实现此行为的任何提示

以下代码的完整xcode项目可从以下站点获得:

致意

更新: 示例代码是错误的。调用registerForDraggedTypes,使集合触发器drawRect符合预期

代码示例:

@interface CollectionViewAppDelegate : NSObject <NSApplicationDelegate> 
{
    NSWindow            *window;
    NSMutableArray      *collectionContent;
}
/* properties declaration */
/* KVC compliance declarations */
@end

@interface MyCollectionView : NSCollectionView
@end

@interface ItemModel
{
    NSString *name;
}
@property (copy)  NSString *name;
@end

@implementation MyCollectionView
- (void)awakeFromNib {
[self registerForDraggedTypes:[NSArray arrayWithObjects:NSStringPboardType, nil]];
}

- (void)drawRect:(NSRect)rect {
    NSLog(@"DrawRect");
}

- (void)mouseDragged:(NSEvent *)aEvent {
    NSPoint     localPoint = [self convertPoint:[aEvent locationInWindow] fromView:nil];
    [self dragImage:[NSImage imageNamed:@"Move.png"] 
                 at:localPoint
             offset:NSZeroSize
              event:aEvent 
         pasteboard:nil 
             source:self 
          slideBack:NO];
}

- (BOOL)prepareForDragOperation:(id < NSDraggingInfo >)sender {
    return YES;
}

- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender {
    return NSDragOperationEvery;
}

- (NSDragOperation)draggingUpdated:(id <NSDraggingInfo>)sender {
    [self setNeedsDisplay:YES];
    return NSDragOperationEvery;
}

- (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal {    
    return NSDragOperationEvery;
}

- (void)mouseDown:(NSEvent *)theEvent {
}

@end

@implementation CollectionViewAppDelegate

@synthesize window, collectionContent, collectionView;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    NSMutableArray *data = [[NSMutableArray alloc] init];
  /* Fill in data */
    [self setCollectionContent:data];
    [data release];
}

/* dealloc */

/* KVC implementation */
@end

@implementation ItemModel
@synthesize name;
/* dealloc */
@end
@接口集合ViewAppDelegate:NSObject
{
NSWindow*窗口;
NSMutableArray*集合内容;
}
/*财产申报*/
/*KVC合规声明*/
@结束
@接口MyCollectionView:NSCollectionView
@结束
@接口项模型
{
NSString*名称;
}
@属性(副本)NSString*名称;
@结束
@MyCollectionView的实现
-(无效)从NIB中唤醒{
[self-RegisterForDragedTypes:[NSArray arrayWithObjects:NSStringPboardType,nil]];
}
-(void)drawRect:(NSRect)rect{
NSLog(@“DrawRect”);
}
-(无效)鼠标标记:(NSEvent*)aEvent{
NSPoint localPoint=[self convertPoint:[aEvent locationInWindow]fromView:nil];
[自绘制:[NSImage ImageName:@“Move.png”]
地点:localPoint
偏移量:NSZeroSize
事件:aEvent
纸板:无
资料来源:赛尔夫
滑回:否];
}
-(BOOL)prepareForDragOperation:(id)发送方{
返回YES;
}
-(NSDragOperation)DragginGeted:(id)发送方{
返回NSDragOperationEvery;
}
-(NSDRAGO操作)draggingUpdated:(id)发送方{
[自我设置需要显示:是];
返回NSDragOperationEvery;
}
-(NSDragOperation)DragingSourceOperationMaskForLocal:(BOOL)isLocal{
返回NSDragOperationEvery;
}
-(无效)鼠标向下移动:(n事件*)事件{
}
@结束
@实现集合ViewAppDelegate
@综合窗口、集合内容、集合视图;
-(无效)ApplicationIDFinishLaunching:(NSNotification*)通知{
NSMUTABLEARRY*数据=[[NSMUTABLEARRY alloc]init];
/*填写数据*/
[自我设置收集内容:数据];
[数据发布];
}
/*解除锁定*/
/*KVC实现*/
@结束
@实现项模型
@综合名称;
/*解除锁定*/
@结束

我认为您无法成功地将
NSCollectionView
的绘图例程子类化。在内部,集合视图被放置在核心动画层中,因此
-drawRect:
不用于渲染其内容。

谢谢您的回答,您是对的。但是,在我修复了对registerForDraggedTypes缺少的调用之后,drawRect在示例中按预期进行了调用。问题仍然存在于我的全尺寸应用程序中。我一直在调查。