Не удалось установить (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?
Ответы
Ответ 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]()