У меня есть приложение, в котором я создаю два подпредставления главного окна, подпредставления принадлежат классу с именем Page, а в каждом подпредставлении я размещаю другое подпредставление класса с именем Ad. Я перетаскиваю классы объявлений между подвидом страницы. Сначала я просто сбрасывал фрейм представления класса Ad, но я действительно хочу разместить его там, где происходит событие NSLeftMouseUp.
Мой процесс для этого состоит в том, чтобы зарегистрировать все подпредставления страницы в массиве по мере их создания. Затем я создал подкласс NSWindow и назначил этот класс своему главному окну в IB. Я передаю массив просмотров страниц этому классу.
Я думаю, переписать метод sendEvent, проверяя, является ли событие NSLeftMouseDown, NSLeftMouseDragged или NSLeftMouseUp. NSLeftMouseDown предназначен для проверки и определения, является ли подпредставление, на которое вы нажали, самым глубоким подвидом иерархии окон - window-> Page class-> Ad class, поскольку я хочу перемещать объявления, а не страницы. Я перебираю массив и проверяю метод descendentOf NSView (Ad), по которому щелкнули, чтобы увидеть, является ли потомок NSView (Page) перечисляемым. (Надеюсь, что это имело смысл). Затем я тоже вытягиваю кадр.
В NSLeftMouseDragged я меняю курсор, чтобы он напоминал перетаскиваемое объявление.
В NSLeftMouseUp я проверяю, в какой вид мы хотим переместить объявление. Что я не могу понять, так это как получить 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)];
}
}
...