Draggable NSButton - PullRequest
       3

Draggable NSButton

2 голосов
/ 08 февраля 2011

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

Я пытаюсь сделать что-то почти в стиле "приборной панели" ... например, перетаскиваемые вещи. В данный момент я просто использую кнопки NSB, которые остаются на месте, но было бы хорошо, если бы их можно было перетаскивать.

Ответы [ 4 ]

5 голосов
/ 22 ноября 2015

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

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

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

- (void)mouseUp:(NSEvent *)theEvent
{
    [self performClick:self];
}
3 голосов
/ 09 февраля 2011

Я бы начал со стандартной инфраструктуры перетаскивания .Даже если вы используете не все функции, это, как правило, хорошая отправная точка и решает множество сложных задач.

1 голос
/ 11 мая 2013

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

Вам потребуется создать подкласс NSButton и переопределить:

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

//With:

    NSRect gframe = self.frame;
    gframe.origin.x = theEvent.locationInWindow.x;
    [self setFrame:gframe];
}
0 голосов
/ 09 февраля 2011

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

Это был бы такой полезный совет, если вы работали на iOS, а вы нет.

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

По сути, идея состоит в том, чтобы перехватить события mouseDown и начать обращать внимание на местоположение мыши, обновляя расположение кнопки на ту же относительную величину, которую мышь перемещает при каждой проверке.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...