Squeak.ru - шаблоны программирования

Пользовательское раскрывающееся окно/диалог в Cocoa

Каковы альтернативы диалоговым окнам в Cocoa? Мне нужно создать собственный диалог (модальный), в котором пользователь сможет ввести некоторую информацию, и когда он/она нажмет OK, мое приложение закроет этот диалог и обработает ввод. По сути, мне нужно что-то вроде выпадающего окна в Xcode, когда вы добавляете новый файл (команда + N): [недостаточно репутации, чтобы опубликовать снимок экрана] Все, что я обнаружил до сих пор, это несколько старых списков и тем, где люди скажем, это называется лист. Но предложенные методы кажутся устаревшими, например

beginSheet: myCustomSheet
            modalForWindow: window
            modalDelegate: self
            didEndSelector: @selector(didEndSheet:returnCode:contextInfo:)
            contextInfo: nil

Есть ли другие способы? Например, я могу создать отдельное окно со своим файлом xib, есть ли какая-то настройка, чтобы сделать его «панелью» или «листом»? Меня немного смущают термины.


Ответы:


1

То, что вы хотите, это «лист». Лист — это одно окно, которое присоединено к другому и блокирует большинство входных данных для окна, к которому оно прикреплено.

Панель — это просто особый вид окна. NSPanel является подклассом NSWindow. Он имеет несколько различных вариантов поведения и возможных стилей. Вы можете использовать панель в качестве листа, но это не обязательно, и это не имеет большого значения.

Обратите внимание, что лист является модальным окном, а не модальным приложением. То есть он запрещает пользователю делать другие действия с окном, к которому он присоединен, но не запрещает пользователю делать что-то в меню приложения или других его окнах. Подразумевается, что листы работают асинхронно. Вы начинаете лист, а затем выполнение продолжается без завершения работы листа. Затем вы обычно должны позволить потоку выполнения вернуться в основной цикл событий. Когда лист завершится, он вызовет указанный вами код.

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

Современный API для представления листа — -[NSWindow beginSheet:completionHandler:]. Вы отправляете это сообщение в «обычное» окно (например, окно документа). Первый параметр - это окно, которое должно быть листом. Обработчик завершения — это код, запускаемый после завершения листа.

Элементы управления на вашем листе обычно нацеливают свои действия на оконный контроллер листа (как и в любом другом окне). В методах действия вы должны вызвать -[NSWindow endSheet:] или -endSheet:returnCode: в родительском окне, чтобы завершить лист и определить код результата, который передается обработчику завершения. Вы можете получить родительское окно, используя свойство sheetParent.

25.03.2015
  • Спасибо за ответ, теперь более понятно. Цените помощь. 26.03.2015
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...