Поиск…


замечания

От Apple: создание пользовательского представления, которое визуализирует в интерфейсе Builder

  • Примечание. Имейте в виду, что если вы используете необычные «пользовательские» шрифты в ваших XIB-элементах (такие как UILabel, UITextField и т. Д.), Тогда начальное время загрузки вашего XIB будет больше в зависимости от выбранного шрифта и версии системы.

Элементы проводки

Создание файла XIB

Панель меню Xcode> Файл> Создать> Файл.
Выберите iOS, Пользовательский интерфейс, а затем «Вид»:

Первый шаг

Дайте вашему XIB имя (да, мы делаем пример Pokemon 👾).
Не забудьте проверить свою цель и нажать «Создать».

Второй шаг

Создайте свой взгляд

Чтобы упростить задачу, установите:

  • Размер: Freeform
  • Строка состояния: нет
  • Верхняя панель: нет
  • Нижняя панель: нет

Третий этап

Нажмите «Размер инспектор» и измените размер представления.
В этом примере мы будем использовать ширину 321 и высоту 256.

Четвертый шаг

Добавьте некоторые элементы в свой XIB-файл, как показано ниже.
Здесь мы добавим изображение (256x256) и переключатель .

Пятый шаг

Добавьте ограничения Auto-Layout, нажав «Разрешить автоматические макеты» (внизу справа) и выбрав «Добавить отсутствующие ограничения» в разделе «Все представления».

Шестой шаг

Просмотрите сделанные изменения, нажав «Показать редактор ассистентов» (вверху справа), затем «Предварительный просмотр».
Вы можете добавить экраны iPhone, нажав кнопку «Плюс».
Предварительный просмотр должен выглядеть следующим образом:

Седьмой шаг

Подкласс UIView

Создайте класс, который будет управлять XIB-файлом.
Панель меню Xcode> Файл> Создать> Файл.
Выберите iOS / Source / Cocoa Touch Class. Нажмите «Далее».

Восьмой шаг

Дайте классу имя, которое должно быть тем же именем, что и файл XIB (Pokemon).
Выберите UIView в качестве типа подкласса, а затем нажмите «Далее».

Шаг Nineth

В следующем окне выберите цель и нажмите «Создать».

Десятый этап

Подключите Pokemon.xib к Pokemon.swift с помощью атрибута «Владелец файла»

Нажмите на файл Pokemon.xib в Xcode.
Нажмите на кнопку «Владелец файла».
В «Инспекторе идентификации» (вверху справа) установите класс в наш недавно созданный файл Pokemon.swift.

Одиннадцатый шаг

Покемонов !!!

Да! Перетащите некоторые покемоны в свой проект, чтобы завершить нашу «инфраструктуру».
Здесь мы добавляем два файла PGN, 256x256, прозрачный.

Двенадцатый шаг

Покажите мне код.

Хорошо, хорошо.
Время добавить код в наш класс Pokemon.swift.

На самом деле это довольно просто:

  1. Внедрить необходимые инициализаторы
  2. Загрузите файл XIB
  3. Настройте представление, которое отобразит XIB-файл
  4. Показать приведенный выше вид

Добавьте следующий код в класс Pokemon.swift:

import UIKit

class Pokemon: UIView {
    
    // MARK: - Initializers
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupView()
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setupView()
    }
    
    // MARK: - Private Helper Methods
    
    // Performs the initial setup.
    private func setupView() {
        let view = viewFromNibForClass()
        view.frame = bounds

        // Auto-layout stuff.
        view.autoresizingMask = [
            UIViewAutoresizing.flexibleWidth,
            UIViewAutoresizing.flexibleHeight
        ]

        // Show the view.
        addSubview(view)
    }
    
    // Loads a XIB file into a view and returns this view.
    private func viewFromNibForClass() -> UIView {
        
        let bundle = Bundle(for: type(of: self))
        let nib = UINib(nibName: String(describing: type(of: self)), bundle: bundle)
        let view = nib.instantiate(withOwner: self, options: nil).first as! UIView
        
        /* Usage for swift < 3.x
        let bundle = NSBundle(forClass: self.dynamicType)
        let nib = UINib(nibName: String(self.dynamicType), bundle: bundle)
        let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
        */

        return view
    }
}

@IBDesignable и @IBInspectable

Добавив @IBDesignable к вашему классу, вы можете сделать это для рендеринга в Interface Builder.
Добавляя @IBInspectable к свойствам вашего класса, вы можете увидеть изменения пользовательских представлений в Interface Builder, как только вы измените эти свойства.

Давайте сделаем Image View нашего пользовательского представления «Inspectable».

Сначала подключите Image View из файла Pokemon.xib к классу Pokemon.swift.

Тринадцатый шаг

Вызовите imageView а затем добавьте следующий код (обратите внимание на @IBDesignable перед именем класса):

@IBDesignable class Pokemon: UIView {
    
    // MARK: - Properties
    
    @IBOutlet weak var imageView: UIImageView!
    
    @IBInspectable var image: UIImage? {
        get {
            return imageView.image
        }
        set(image) {
            imageView.image = image
        }
    }

    // MARK: - Initializers
    ...

Использование пользовательских представлений

Попав в основной файл раскадровки, перетащите UIView в него.
Измените размер представления, скажем, 200x200. Централизация.
Перейдите к инспектору идентификации (вверху справа) и установите класс «Покемон».

Четырнадцатые шаги

Чтобы выбрать Pokemon, перейдите к Инспектору атрибутов (вверху справа) и выберите один из изображений Pokemon, которые вы ранее добавили, используя удивительное @IBInspectable свойства @IBInspectable .

Пятнадцатый шаг

Теперь дублируйте свой пользовательский вид Pokemon.
Дайте ему другой размер, скажем 150x150.
Выберите другое изображение Pokemon, соблюдайте:

Шестнадцатый шаг

Теперь мы добавим больше логики к этому самосогласованному пользовательскому элементу пользовательского интерфейса.
Кнопка позволяет включать / отключать Pokemons.

Создайте IBAction от кнопки Switch до класса Pokemon.swift.
Вызвать действие вроде switchTapped .
Добавьте к нему следующий код:

// MARK: - Actions

@IBAction func switchTapped(sender: UISwitch) {
    imageView.alpha = sender.on ? 1.0 : 0.2
}

// MARK: - Initializers
...

Конечный результат:

окончательный

Вы сделали!
Теперь вы можете создавать сложные пользовательские представления и использовать их в любом месте.
Это повысит производительность при изоляции кода в автономных элементах пользовательского интерфейса.

Окончательный проект можно клонировать в Github.
( Обновлено до Swift 3.1 )

Как сделать пользовательский повторно используемый UIView с помощью XIB

В следующем примере показаны шаги, связанные с инициализацией представления из XIB.

Это не сложная операция, но необходимо выполнить точные шаги, чтобы сделать это правильно в первый раз, избегая исключений.

Как работает loadNibNamed

Основные шаги:

  1. Создать XIB
  2. Создать класс .h и .m
  3. Определение точек в .h
  4. Подключите розетки между .h и XIB

См. Прилагаемый скриншот:

Объект метки, подключенный к переменной myLabel IBOutlet UILabel

  1. Вызывать loadNibNamed внутри функции initWithCoder файла .m. Это необходимо для того, чтобы вы могли напрямую разместить объект UIView в файл раскадровки / родительского UIView XIB и определить его как свое собственное представление. При загрузке раскадровки / родительского XIB другого кода инициализации не требуется. Пользовательский вид может быть добавлен к другим представлениям, как и другие встроенные объекты Objective C view, заданные в XCode.


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow