2012-03-09 6 views
0

Я бег модального окна (я пробовал как beginModalSessionForWindow и runModalForWindow), после падения сопротивления в NSTableView:какао: перетаскивание создают проблемы для модального окна

(BOOL)tableView:(NSTableView*)tableView acceptDrop:(id <NSDraggingInfo>)info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)dropOperation 
{ 
    //launch modal window 
} 

Однако, NSTextField из модального окна кажется недоступным (он «заблокирован», я не могу ввести его), пока не увижу анимацию (Mac OSX) значка файла, возвращающуюся к файлу. Тогда это работает.

Надеюсь, что ясно, что модальное окно прерывает выпуск перетаскивания.

Благодаря

ответ

1

Проблема здесь состоит в том, что -tableView:acceptDrop:row:dropOperation: должен вернуться до Run Loop ходатайствует для модального окна. К сожалению, независимо от того, какой метод вы используете для создания модальности, он изменит Run Loop до тех пор, пока модальность не исчезнет, ​​а это означает, что система будет думать, что вы все еще не решили падение. В конце концов, это будет тайм-аут, и падение вернется (это то, что вы видите).

Один из способов решения этой проблемы - отправить сообщение, чтобы установить окно очень скоро после этого, но не в этом цикле запуска (с использованием -performSelector:withObject:afterDelay:). Поскольку вы уже находитесь в основном потоке, это запланирует обратный вызов после запрошенной задержки с использованием таймера в основном потоке, что позволит вам ответить.

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