2011-01-31 5 views
1

В моем приложении NSOutlineView используется, как показано ниже, 1 - Использование CustomOutlineView, потому что я хочу, чтобы контролировать NSOutlineView фон,NSOutlineView Drag-н-Drop

2 - Использование CustomeCell, потому что я должен быть настроить Cell

Заголовочный файл: MyListView.h

/* 
MyUICustomView is the Subclass from NSView and this is i need to have 
for some other my application purpose 
*/ 
@interface MyListView : MyUICustomView<NSOutlineViewDataSource> 
{ 
     // MyCustomOutlineview because, i need to override DrawRect Method to have 
     // customized background 
     MyCustomOutlineView *pMyOutlineView; 

} 

@property(nonatomic,retain)MyCustomOutlineView *pMyOutlineView; 

, а также я должен быть в состоянии перетащить-н-падение в режиме структуры, за то, что перетащить-н-капли я сделал следующее,

-(void)InitOutlineView{ 
     // Creating outline view 
     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]; 
    pMyOutlineView  = [[[MyCustomOutlineView alloc] initWithFrame:clipViewBounds] autorelease]; 


    NSTableColumn* firstColumn  = [[[NSTableColumn alloc] initWithIdentifier:@"firstColumn"] autorelease]; 
#ifdef ENABLE_CUSTOM_CELL 
     // Becuase cell should have Image, Header Info and brief detail in small font, 
     // so i need to have custom cell 
    ImageTextCell *pCell = [[ImageTextCell alloc]init]; 
    [firstColumn setDataCell:pCell]; 
     // SO i can fill the data 
    [pCell setDataDelegate:self]; 
# endif 

     [pMyOutlineView setDataSource:self]; 
     /* This is to tell MyCustomOutlineView to handle the context menu */ 
    [pMyOutlineView setDataDelegate:self]; 
     [scrollView setDocumentView:pCTOutlineView]; 

     [pMyOutlineView addTableColumn:firstColumn]; 
     [pMyOutlineView registerForDraggedTypes: 
     [NSArray arrayWithObjects:OutlinePrivateTableViewDataType,nil]]; 

     [pMyOutlineView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:YES];** 

    } 

и поддержка перетащить-н-падение Реализован следующий метод

 - (BOOL)outlineView:(NSOutlineView *)outlineView writeItems:(NSArray *)items toPasteboard:(NSPasteboard *)pboard{ 
     NSData *data = [NSKeyedArchiver archivedDataWithRootObject:items]; 
     [pboard declareTypes:[NSArray arrayWithObject:OutlinePrivateTableViewDataType] owner:self]; 
     [pboard setData:data forType:OutlinePrivateTableViewDataType]; 
     return YES; 

    } 


    - (NSDragOperation)outlineView:(NSOutlineView *)outlineView validateDrop:(id <NSDraggingInfo>)info proposedItem:(id)item proposedChildIndex:(NSInteger)index{ 
    // Add code here to validate the drop 

    NSLog(@"validate Drop"); 
    return NSDragOperationEvery; 
} 

     - (BOOL)outlineView:(NSOutlineView *)outlineView acceptDrop:(id <NSDraggingInfo>)info item:(id)item childIndex:(NSInteger)index{ 
      NSLog(@"validate Drop"); 
    } 

, но до сих пор, когда я пытаюсь перетащить ряд NSOutlineView ничего не происходит, даже я пытался отладить с помощью NSLog, но я не мог» t см. любой журнал из выше функции, У меня отсутствует какой-либо важный метод? для поддержки Drag-n-drop

+0

Код, который вы * не * t - это именно тот код, который нам нужно видеть. Мы не можем помочь вам исправить ваш код перетаскивания, если вы его не публикуете. Подсказка: метод ... writeRows ... - это минимум, необходимый для успешного завершения перетаскивания. –

+0

Привет, Джошуа, я загружу код, но WriteRow также мне нужно реализовать для outlineView, потому что я видел прототип, его только для TableView – Amitg2k12

+0

@Joshua, добавили код для метода, моя проблема в том, что точка останова даже не попадает для ни одного из этих методов, поэтому я думаю, что мне не хватает некоторых методов делегирования импорта, PN: мне нужно поддерживать Drag-n-Drop с открытым контуром – Amitg2k12

ответ

1

Основываясь на вашем коде, похоже, что вы ничего не возвращаете для метода ... writeItems .... Предполагается, что этот метод возвращает BOOL (независимо от того, были ли элементы успешно записаны или вы отказываетесь от перетаскивания). не Возвратившись ничего должно давать вам предупреждение компилятора ...

+0

@Joshua, [pMyOutlineView setDataSource: self] уже добавлен, это то, что вы тоже имеете в виду, кроме того, другой метод dataSource, такой как setObjectValue и т. Д., Подходит к моему интерфейсу, кроме drag-n-drop :( – Amitg2k12

+0

Хммм ... Хорошо, я посмотрел на код, который вы отправили, и обновил мой ответ. Полный код, который вы вставили? –

+0

@ Joshua, Спасибо, я обновил весь необходимый код, вместе с этим у меня есть некоторый метод источника данных для заполнения данных , должен ли я обновить это тоже, но связанный с Drag-n-Drop завершен. – Amitg2k12

0

HI, , наконец, получил возможность избавиться от этого, Проблема заключается в том

[firstColumn setWidth:25]; 

Так перетаскивание работает только ДО 25 пикселей образуют левый, и я заметил это, то его рабочее время, но странно видеть, мой взгляд контур имеет только один столбец, для рисования, его не проверяет ограничения, но для дрэг-н-уронить свою проверку,

спасибо Джошуа

Смежные вопросы