2011-02-08 3 views
2

Есть ли способ сделать NSButton перетаскиваемым? Я имею в виду, что в последнем построенном приложении пользователь может перетащить NSButton.Draggable NSButton

Я пытаюсь сделать что-то почти в стиле «приборной панели» ... как перетаскиваемые вещи. На данный момент я просто использую NSButtons, которые остаются на своем месте, но было бы неплохо, если бы их можно было перетащить.

ответ

0

Взгляните на «continueTrackingWithTouch: withEvent:» в классе UIControl, UITouch и руководстве по управлению событиями. Основная идея - сделать обработчик для события TouchDragInside, используя данные местоположения из события, чтобы обновить центр кнопки.

Это был бы удобный совет, если бы вы работали над iOS, а это не так.

С быстрым взглядом на несколько вещей в NSControl и NSView, я уверен, что это можно сделать, у меня просто нет быстрого ответа, и у меня мало времени. :(

В принципе, идея заключается в том, чтобы поймать события MouseDown, и начать обращать внимание на расположение мыши, обновляя расположение кнопки того же относительного количество, что курсор мыши каждый раз, когда вы проверяете.

Более позже, если это необходимо.

+0

хмм .. Точно так же вы знаете, что я сказал «NSButton» не «UIButton.» –

+0

О, карп, я так застрял на земле iPhone, я просто добавил их. Держись ... –

+0

Я также читал UIButton. –

3

Я хотел бы начать со стандартной Drag-and-drop infrastructure. Даже если вы не можете использовать все возможности, это как правило, является хорошей отправной точкой и обрабатывает много сложных случаев для вас.

1

для добавить глубину:

Вы должны были бы подкласс NSButton и overide:

-(void)mouseDragged:(NSEvent *)theEvent{ 

//With: 

    NSRect gframe = self.frame; 
    gframe.origin.x = theEvent.locationInWindow.x; 
    [self setFrame:gframe]; 
} 
3

NSButton обычно съедает все события мыши. Поэтому вы должны создать подкласс NSButton и переопределить не только обработку, но и увлекая за обработку щелчка:

- (void)mouseDown:(NSEvent *)theEvent 
{ 
    [self highlight:YES]; 
} 

- (void)mouseDragged:(NSEvent *)event 
{ 
// start a dragging session 
} 

- (void)mouseUp:(NSEvent *)theEvent 
{ 
    [self performClick:self]; 
} 
+0

Как вы это делаете быстро и где вы это делаете Я имею в своем ViewController.swift @IBAction переопределить func mouseDown (theEvent: NSEvent) {...} перерыв здесь на всех mouseDown, за исключением случаев, когда это элемент управления NSButton, на который я нажимаю? –

+0

Фрэнк, большое спасибо! Это прекрасный ответ! –