Подтвердить что ты не робот

Не удалось установить (cornerRadius) определяемое пользователем свойство проверки (UIView)

Подробнее

Я смотрел видео Session 411 на WWDC 2014, ссылаясь на " Что нового в Interface Builder", и я пытался создать Frameworks для того, чтобы создайте классы @IBDesignable, чтобы просмотреть мои изменения в Storyboard без необходимости запуска приложения.

@IBInspectable свойства отображаются корректно, когда я добавляю свой класс в определенное представление и правильно отображают представление с помощью приведенного ниже кода:

код

@IBDesignable
class MyView: UIView {
    @IBInspectable var borderColor: UIColor = UIColor.clearColor() {
        didSet {
            layer.borderColor = borderColor.CGColor
        }
    }

    @IBInspectable var borderWidth: CGFloat = 0 {
        didSet {
            layer.borderWidth = borderWidth
        }
    }

    @IBInspectable var cornerRadius: CGFloat = 0 {
        didSet {
            layer.cornerRadius = cornerRadius
        }
    }

    @IBInspectable var masksToBounds: Bool = false {
        didSet {
            layer.masksToBounds = masksToBounds
        }
    }
}

Журнал

Я заметил, что эти атрибуты добавляются в Атрибуты, определенные пользователем Identity Inspector). Теперь, что я ожидаю от этого, когда я запускаю код, чтобы сохранить эти изменения, которые я сделал с определенным представлением.

Я запускаю приложение, и представление не загружает Пользовательские атрибуты времени выполнения и дает эту ошибку на выходе (не сбой):

Unknown class MyClass in Interface Builder file
Failed to set (cornerRadius) user defined inspected property on (UIView)

Вопрос

Что заставляет приложение не загружать Пользовательские атрибуты времени выполнения, которые я добавил в Identity Inspector?

4b9b3361

Ответ 1

Код правильный.
Когда вы объявляете @ IBDesignable, все свойства @IBInspectable отображаются в построителе интерфейса как пользовательские атрибуты времени выполнения.

Проблема -

Неизвестный класс MyClass в файле Interface Builder

Это означает, что интерфейс Builder не смог найти какой-либо класс. У вас установлен неправильный класс, который не существует в вашем приложении.
Ваш класс customView MyView, но в интерфейсе Builder у вас есть MyClass

enter image description here

Решение для исправления -

  • Установите правильный класс в интерфейсе Builder, в вашем случае MyView
  • Проверить статус Дизайн. Он должен быть обновлен, если это не так, как что-то не так.

enter image description here

Также Если вы решили удалить клиента Designable, вы должны

  • Удалить пользовательский класс
  • Удалить пользовательские атрибуты времени выполнения

enter image description here

Ответ 2

Основываясь на названии вопроса, несколько человек могут приехать сюда с немного другой проблемой (как и я). Если вы

  • добавил @IBInspectible
  • а затем удалите его в коде

Затем вы также можете получить ошибку, похожую на

Не удалось установить (xxx) пользовательское проверенное свойство в [Свой пользовательский View]...: этот класс не является ключевым значением, совместимым с кодировкой для ключа [XXX].

Решение состоит в том, чтобы удалить старое свойство.

введите описание изображения здесь

Откройте инспектор удостоверений для своего класса, выберите имя свойства в разделе Атрибуты времени, определенные пользователем, и нажмите кнопку минуса (-).

Опять же, это не ответ на вопрос OP, но это может быть ответ на чужую проблему, которая приходит сюда.

Ответ 3

в Indentity inspector add in user Определенные атрибуты времени выполнения

layer.cornerRadius - строка типа

first

после перехода к инспектору Attibutes и выберите "Подвижные клипы"

second