Реализация собственного NSView в Какао на OS X - PullRequest
1 голос
/ 08 января 2011

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

Я большой поклонник 0xED.app и хотел бы повторить его основной вид "hex dump". Как бы я поступил так?

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

0xED screenshot

Ответы [ 3 ]

0 голосов
/ 08 января 2011

Чтобы начать и посмотреть, как все в основном работает:

  1. Подкласс NSView.
  2. Добавьте переменную экземпляра для хранения ваших NSData.
  3. Переопределить drawRect:

Этот подход будет медленным для большого объема данных, но даст вам хороший контроль над реализацией подкласса NSView. После этого вы захотите улучшить производительность рисования, реализовав что-то лучше, чем повторяющиеся вызовы для рисования строк по одному. Вы также захотите реализовать переопределения методов, таких как mouseDown: и keyDown: для обработки ввода от пользователя, чтобы позволить такие вещи, как выбор диапазона байтов.

Это должно помочь вам начать, как только вы начнете, я бы предложил задать дополнительные вопросы.

0 голосов
/ 12 марта 2014

Если вы хотите взглянуть на то, как построен интерфейс Какао, вы можете использовать NibToXibConverter .

  1. Загрузите 0xED, щелкните правой кнопкой мыши на 0xED.app и выберите «Показать содержимое пакета». Извлеките папку Contents / Resources / English.lproj.
  2. Запустите NibToXibConverter, перейдите к папке, извлеченной выше, и поставьте галочку рядом с «Декомпилировать NIB».
  3. Выберите кнопку «Преобразовать», и она преобразует NIB в XIB
  4. Дважды щелкните XIB, чтобы открыть его в XCode, и вы увидите, как они построены

    • Вы заметите, что в случае 0xED он использует пользовательский класс (скорее всего, подкласс UIView с пользовательским рисунком, как предлагает Джон Хесс).
0 голосов
/ 08 января 2011

Я предполагаю, что это возможно с использованием NSTableView или его подкласса.

Может быть, немного сложно добиться правильного выделения текста таким образом, но, вероятно, это возможно.

...