2016-11-26 15 views
3

Я создаю NSWindowController и NSViewController с помощью Interface Builder, а затем я удалил заголовок NSWindow's, чтобы я мог настраивать Window. Я создаю подкласс класса NSWindow И делаю следующие вещи в классе.Невозможно перетащить или переместить пользовательский NSWindow

override var canBecomeKey: Bool { 
    return true 
} 

override var canBecomeMain: Bool { 
    return true 
} 

я также установить их в NSWindowController:

{ 
    self.window?.becomeKey() 
    self.window?.isMovableByWindowBackground = true 
    self.window?.isMovable = true; 
    self.window?.acceptsMouseMovedEvents = true 
} 

отсюда обычай Окно можно перетаскивать,
Но когда я сделать NSViewController как NSWindowController'sContentViewController, я не могу перетащить customWindow.

Что может быть здесь?

ответ

0

Я имел эту проблему раньше, здесь было мое решение, которое работает (это в Objective-C, хотя, так что просто выбросить его там в случае, если это помогает):

@property BOOL mouseDownInTitle; 

- (void)mouseDown:(NSEvent *)theEvent 
{ 
    self.initialLocation = [theEvent locationInWindow]; 
    NSRect windowFrame = [self frame]; 
    NSRect titleFrame = NSMakeRect(0, windowFrame.size.height-40, windowFrame.size.width, 40); 
    NSPoint currentLocation = [theEvent locationInWindow]; 

    if(NSPointInRect(currentLocation, titleFrame)) 
    { 
     self.mouseDownInTitle = YES; 
    } 
} 

- (void)mouseDragged:(NSEvent *)theEvent 
{ 
    if(self.mouseDownInTitle) 
    { 
     NSRect screenVisibleFrame = [[NSScreen mainScreen] visibleFrame]; 
     NSRect windowFrame = [self frame]; 

     NSPoint newOrigin = windowFrame.origin; 
     NSPoint currentLocation = [theEvent locationInWindow]; 



     // Update the origin with the difference between the new mouse location and the old mouse location. 
     newOrigin.x += (currentLocation.x - self.initialLocation.x); 
     newOrigin.y += (currentLocation.y - self.initialLocation.y); 

     // Don't let window get dragged up under the menu bar 
     if ((newOrigin.y + windowFrame.size.height) > (screenVisibleFrame.origin.y + screenVisibleFrame.size.height)) { 
     newOrigin.y = screenVisibleFrame.origin.y + (screenVisibleFrame.size.height - windowFrame.size.height); 
     } 

     [self setFrameOrigin:newOrigin]; 
    } 
} 
+0

Я уже использовал метод, который вы посоветовали, но это не работает для меня. когда я перетаскиваю вид, он исчезнет, ​​я подумал, что, возможно, что-то не так с установленным фреймом перетаскиваемого представления. –

0

Контролирующий фактором здесь является вид-х mouseDownCanMoveWindow Недвижимость. По умолчанию это зависит, в свою очередь, от его свойства isOpaque. Если вы или один из ваших суперклассов переопределите isOpaque, чтобы вернуть true, то реализация по умолчанию mouseDownCanMoveWindow вернет false. Если вы хотите, чтобы он вел себя по-другому, вам тоже нужно переопределить это.

+0

Я уже нахожу свою проблему, когда я перетаскиваю, что я на самом деле перетаскиваю, это представление NSViewController, я делаю окно невидимым, я думал, что это окно, но это не так. я все еще запутался, что я добавляю представление в пользовательское окно. По xib, это работа, но добавьте представление контроллера в пользовательское окно, оно не работает –