NSOutline View Drag-n-Drop Задача - PullRequest
       24

NSOutline View Drag-n-Drop Задача

1 голос
/ 03 февраля 2011

Дорогие все, Я борюсь с NSOutline View, чтобы выполнить перетаскивание в таблице с последних 2-3 дней, но не могу понять, что я делаю неправильно, Это то, что я сделал до сих пор,

Требования, 1 - Я хочу иметь прозрачный или с некоторым фоновым изображением NSoutlineview на мой взгляд, чтобы сделать это, мне нужно переписать метод drawRect NSOutlineView, это то, что я сделал

в заголовочном файле

@interface MyCustomOutlineView:NSOutlineView{
NSImage *pBackgroundImage;

}

- setBackgroundImage:(NSImage *)pImage;

В исходном файле я просто перезаписываю drawRect и некоторые другие материалы, чтобы нарисовать фоновое изображение или сделать его прозрачным, и это работает нормально,

Теперь, на мой взгляд, я объявил объект NSOutlineView следующим образом:

/ * * Мой пользовательский вид будет иметь возможность рисовать градиент и другие эффекты
* /

@interface OutlineParentView:MyCustomView<NSOutlineDataSource>{
   MyCustomOutlineView *pOutlineView;
}

@property(nonatomic,retain)MyCustomOutlineView *pOutlineView;

В исходном файле реализован следующий метод, Этот метод будет вызываться из initWIthFrame

#define OutlineViewPrivateDataType "MyOutlinePrivateData"
-(void)InitOutlineView{
    NSRect          scrollFrame = [self bounds];
    NSScrollView*   scrollView  = [[[NSScrollView alloc] initWithFrame:scrollFrame] autorelease];
    [scrollView setBorderType:NSNoBorder];
    [scrollView setHasVerticalScroller:YES];
    [scrollView setHasHorizontalScroller:NO];
    [scrollView setAutohidesScrollers:YES];
    [scrollView setDrawsBackground: NO];
    NSRect          clipViewBounds  = [[scrollView contentView] bounds];
    pOutlineView       = [[[CommUICustomOutlineView alloc] initWithFrame:clipViewBounds] autorelease];
    NSTableColumn*  firstColumn     = [[[NSTableColumn alloc] initWithIdentifier:@"firstColumn"] autorelease];
    ImageTextCell *pCell = [[ImageTextCell alloc]init];
    [firstColumn setDataCell:pCell];
    [pCell setDataDelegate:self];
    [firstColumn setWidth:25];
    [pOutlineView  addTableColumn:firstColumn];
    [pOutlineView setRowHeight:30];
    [pOutlineView setDataSource:self];

    /* setData delegate implemented in the MyOutlineView to handle some of event in this  
       interface if i don't write this, then i can't handle the menu event on the 
       Outlineview  
     */
    [pOutlineView setDataDelegate:self];

    **/* On this line i am getting one warning, saying OutlineParentView doesn't implement    
       NSOutlineView delegate protocol */**
    [pOutlineView setDelegate:self];
    [scrollView setDocumentView:pOutlineView];
    /* I don't want group row to be highlighted */
    [pOutlineView setSelectionHighlightStyle:NSTableViewSelectionHighlightStyleSourceList];
    [pOutlineView registerForDraggedTypes:
         [NSArray arrayWithObjects:OutlineViewPrivateDataType,nil]];

    [pOutlineView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:YES];
    [scrollView setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];
        [self addSubview:scrollView];
    [self setAutoresizesSubviews:YES];
    [self log:@"Outline view created "];

}

Другой важный метод, связанный с Drag-n-Drop, реализованный как показано ниже

- (BOOL)outlineView:(NSOutlineView *)outlineView writeItems:(NSArray *)items toPasteb oard:(NSPasteboard *)pboard{
    [self log:@"write Items"];
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:items];
    [pboard declareTypes:[NSArray arrayWithObject:OutlineViewPrivateDataType] 
    owner:self];
    [pboard setData:data forType:OutlineViewPrivateDataType];
    return YES;
}

    - (NSDragOperation)outlineView:(NSOutlineView *)outlineView validateDrop:(id < NSDraggingInfo >)info proposedItem:(id)item proposedChildIndex:(NSInteger)index
    {
        NSLog(@"validate Drop");
        return NSDragOperationEvery;
    }
    - (BOOL)outlineView:(NSOutlineView *)outlineView acceptDrop:(id < NSDraggingInfo >)info item:(id)item childIndex:(NSInteger)index{
        [self log:@"inside accept drop for NSView "];
        return YES;
    }

Я проверил пример кода Apple DragnDrop, но не смог понять, что я делаю неправильно, я считаю, что некоторые проблемы с

[pOutlineView setDelegate: self]

Функция, но как решить это, чего я не знаю, Недавно я обновил MyTableView до MyOutlineView, недавно я смог выполнить Drag-nDrop в представлении Custom Table, Остальные вещи работают нормально, например, DataSource и т. Д ...

Заранее спасибо С уважением Рохан

1 Ответ

1 голос
/ 04 февраля 2011

Я настраивал ColumnWidth, чтобы перетаскивание работало для заданной ширины, а не для полной строки. Моя ошибка :(

 [firstColumn setWidth:25];

Удаление этой строки работает нормально

Но ребята сталкиваются с другой проблемой Относительно NSoutlineView и WriteItem | Проблема перетаскивания

...