【问题标题】:Cocoa: drag and drop create problems to a modal windowCocoa:拖放创建问题到模态窗口
【发布时间】:2012-03-09 19:26:23
【问题描述】:

在 NSTableView 中拖放后,我正在运行模式窗口(我已经尝试过 beginModalSessionForWindow 和 runModalForWindow):

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

但是,模式窗口的 NSTextField 似乎不可用(它被“锁定”,我无法输入),直到我看到文件图标移回文件的(mac OSX)动画。然后就可以了。

我希望清楚,模态窗口似乎正在中断拖放释放。

谢谢

【问题讨论】:

    标签: objective-c cocoa


    【解决方案1】:

    这里的问题是-tableView:acceptDrop:row:dropOperation: 需要在运行循环为模态窗口进行调解之前返回。不幸的是,无论您使用哪种方法来放置模态框,它都会更改 Run Loop 直到模态框消失,这意味着系统会认为您仍然没有解决丢弃问题。最终,它会超时,并且下降会弹回(这就是您所看到的)。

    解决此问题的一种方法是在不久之后向自己发送一条消息以建立窗口,但不在此运行循环中(使用-performSelector:withObject:afterDelay:)。由于您已经在主线程中,这将在您请求的延迟后使用主线程上的计时器安排回调,以便您做出响应。

    【讨论】:

      猜你喜欢
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 2012-02-14
      • 2012-09-07
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      相关资源
      最近更新 更多