У меня есть приложение, в котором я создаю два подпредставления главного окна, подпредставления относятся к классу Page, и в каждом подпредставлении я размещаю еще одно подпредставление класса с именем Ad. Я перетаскиваю классы объявлений между подвидами страницы. Первоначально я просто сбрасывал кадр представления класса Ad, но я действительно хочу поместить его туда, где происходит событие NLSleftMouseUp.
Мой процесс для этого заключается в регистрации всех подвидов Page в массиве по мере их создания. Затем я создал подкласс NSWindow и назначил этот класс моему главному окну в IB. Я передаю массив просмотров страниц этому классу.
Я думаю перезаписать метод sendEvent, проверяя, является ли событие NSLeftMouseDown, NSLeftMouseDragged или NSLeftMouseUp. NLSleftMouseDown должен проверить и посмотреть, является ли нажатое подпредставление самым глубоким подпредставлением иерархии окон - класс окна-> Класс страницы-> Класс объявлений, поскольку я хочу перемещать рекламу, а не страницы. Я перебираю массив, а затем проверяю метод потомка NSView (Ad), по которому щелкнули, чтобы увидеть, является ли он потомком перечисляемого NSView (Page). (Надеюсь, это имело смысл). Затем я стягиваю и его раму.
В NLSleftMouseDragged я изменяю курсор, чтобы он напоминал перетаскиваемую рекламу.
В NLSleftMouseUp я проверяю, в какое представление мы хотим переместить рекламу. Чего я не могу понять, так это того, как получить NSPoint для NSLeftMouseUp в этом представлении, я могу получить его для окна, но x/y этой точки будет далеко для принимающего подпредставления... как мне получить NSPoint в подвиде?
...
} else if ([e type] == NSLeftMouseUp) {
//get which view we are going to drop the ad on
landingView = [[self contentView] hitTest:[e locationInWindow]];
/****ui question here for Mike:
if the mouseup event is not on a page class, should the mouse remain the dragcursor image here or should
we change it back to the mouse icon and stop this process****/
if ([[landingView className] isEqual:@"Page"]) {
//get ad rect
float adX = thisAdFrame.origin.x + 10.0;
float adY = thisAdFrame.origin.y + 20.0;
//get nspoint of mouse up event
NSPoint p = [e locationInWindow];
[landingView addSubview:theSubView];
[theSubView setFrame:NSMakeRect(p.x, p.y, thisAdFrame.size.width, thisAdFrame.size.height)];
}
}
...