Создание представления с перетаскиваемыми текстовыми элементами - PullRequest
2 голосов
/ 10 июля 2010

Я пытаюсь создать представление для своего рода приложения для мозгового штурма, такого как, например, OmniGraffle, с элементами, которые содержат текстовые представления и могут быть перемещены. (Кроме того, они должны быть подключены стрелками, но это не является (пока) проблемой)

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

В чем я уверен, так это в том, что мне нужен собственный вид, в котором я могу создавать свои элементы - до сих пор я пытался это сделать:

  • Сначала я искал синтаксис для добавления подокон к окну для создания своих элементов. Подокна, как я себе представлял, будут автоматически перемещаться и выходить вперед и так далее.
    Проблема: поскольку ваши опытные программисты по какао, вероятно, не удивлены, я был ошеломлен тем, что ничего подобного не обнаружил - кажется, это что-то, что не предназначено в Какао ?!

  • Затем я подумал о создании подпредставлений, которые содержат настраиваемый вид для чертежа строки заголовка (где пользователь может щелкнуть, чтобы перетащить элемент) и NSTextView.
    Проблемы:

    • Я читал, что не очень умно создавать десятки подпредставлений в окне, потому что это будет очень медленно (или это будет не так уж плохо в этом случае, потому что все подпредставления будут экземплярами всегда одного и того же класса?) ).
    • Также я не могу узнать, как загрузить подпредставление из nib- или xib-файла. Нужен ли viewController? Или это еще больше усугубит проблему десятков случаев?
    • И Apple советует вам не перекрывать подпредставления (хорошо, это было бы не так важно, но мне действительно интересно, как ребята из OmniGroup сделали OmniGraffle ...)

  • Из-за этого я теперь хотел нарисовать строку заголовка в окружающем пользовательском представлении и создать текстовое представление программно (как я понимаю, текстовое представление не является действительно представлением и берет его функциональность от NSCell, чтобы уменьшить все усилия с представлениями?).
    Проблемы:

    • Даже это не удалось, потому что я не смог создать текстовое представление, которое не заполняет полное окно (initWithFrame: из [[NSScrollView alloc] initWithFrame: aRect] просто кажется проигнорированным, или я ошибаюсь?).
    • Кроме того, в конечном приложении должно быть несколько кнопок для каждого элемента. Я полагаю, что было бы проще сделать с подпредставлением из nib-файла для каждого элемента?

Ну, теперь, когда ничего не работает, и чем больше я читаю, тем больше проблем, кажется, возникает, я довольно растерян и разочарован.
Как я мог реализовать такую ​​программу? Может кто-нибудь, пожалуйста, подтолкнуть меня в правильном направлении?

1 Ответ

1 голос
/ 22 августа 2010

Я создал класс для перетаскиваемых элементов, где я сохраняю положение, размер и текст в переменных экземпляра. На мой взгляд, каждый новый экземпляр элемента добавляется в массив (на данный момент это работает без контроллера). Массив используется для рисования всех элементов в цикле в drawRect:. Для текста элемента я просто использую NSTextFieldCell, для которого задан сохраненный текст из каждого элемента в одном цикле.

Таким образом, также возможно перекрытие элементов.

...