다음 코드 세트가 있습니다.
CustomView.h
#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface CustomView : UIView
@property (nonatomic) IBInspectable UIColor *borderColor;
@property (nonatomic) IBInspectable CGFloat borderWidth;
@property (nonatomic) IBInspectable CGFloat cornerRadius;
@end
CustomView.m
#import "CustomView.h"
@implementation CustomView
- (void)setBorderColor:(UIColor *)borderColor {
_borderColor = borderColor;
self.layer.borderColor = borderColor.CGColor;
}
- (void)setBorderWidth:(CGFloat)borderWidth {
_borderWidth = borderWidth;
self.layer.borderWidth = borderWidth;
}
- (void)setCornerRadius:(CGFloat)cornerRadius {
_cornerRadius = cornerRadius;
self.layer.cornerRadius = cornerRadius;
}
@end
(Swift 참조를 위해이 문제는 Swift 코드에서도 발생했습니다.)
CustomView.swift
@IBDesignable
class CustomView : UIView {
override init(frame: CGRect) {
super.init(frame: frame)
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
@IBInspectable var borderColor : UIColor = UIColor.clearColor() {
didSet {
self.layer.borderColor = borderColor.CGColor
}
}
@IBInspectable var borderWidth : CGFloat = 0.0 {
didSet {
self.layer.borderWidth = borderWidth
}
}
@IBInspectable var cornerRadius : CGFloat = 0.0 {
didSet {
self.layer.cornerRadius = cornerRadius
}
}
}
UIView
스토리 보드의 뷰 컨트롤러에를 추가 하고 하위 클래스를 CustomView
.
그러면 "Designables"행이 추가됩니다. "업데이트 중"에 멈춰 있고 툴팁에 "대상 빌드 대기 중"이라고 표시됩니다. 이 상태에서 변경되지 않습니다.
속성 검사로 이동하면 다음 속성을 설정할 수 IBInspectable
있습니다.
일단 설정되면 "사용자 정의 런타임 속성"에도 표시됩니다.
그러나 "Designables"상태는 여전히 동일한 툴팁으로 "업데이트 중"이상으로 이동하지 않습니다 (Cmd + B 빌드를 여러 번 시도했지만 아무것도 변경되지 않았습니다).
또한 IBInspectable
속성을 설정하면 각 속성에 대한 경고가 표시됩니다.
IBDesignables- "UIView"인스턴스에서 키 경로 "borderColor"에 대한 사용자 정의 런타임 속성을 무시합니다.이 클래스는 키 borderColor에 대해 키-값 코딩을 준수하지 않습니다.
생성 된 경고의 스크린 샷 :
키-값 코딩 준수 문제에 대해 잘 알고 있으며 일반적으로 문제를 해결하는 방법을 알고 있지만 여기서이 문제를 해결하는 방법을 이해하지 못합니다. 보기의 ID 검사기에 따르면보기는 "CustomView"입니다 (이러한 속성이없는 일반 "UIView"가 아님). 뷰가 "CustomView"가 아니라면 이러한 디자인 가능한 속성이 Attributes Inspector에 표시되지 않을 것입니다. 그러나 Interface Builder가 이러한 속성을 뷰에 적용하려고하면 뷰의 클래스가 "UIView"라고 생각하고 속성을 적용 할 수 없다고 생각하게됩니다.
도움이 필요하세요? 중요한 세부 사항을 빠뜨린 경우 알려주십시오. 그러나 그만한 가치가있는 부분에 대해서는 이 튜토리얼을 정확하게 따랐 습니다 (ObjC vs Swift 제외). 이 튜토리얼을 다른 컴퓨터에서 정확히 따랐고 매력처럼 작동했다는 점도 주목할 가치가 있습니다.
의견을 바탕으로 .m
파일이 포함되어 있지 않아 문제를 일으킬 수 있다고 제안되었습니다 . 나는이 시나리오가 사실이 되려면 내 길을 떠났을 것이라고 생각했지만 어쨌든 확인했습니다.
이 작업을 처음 시작했을 때 IB_DESIGNABLE
클래스가 다른 UIKit
프레임 워크의 일부 여야 한다는 것을 이해하고 있었습니다 . 따라서이 첫 번째 스크린 샷에서 하나의 클래스가있는 "CustomViews"프레임 워크를 설정 한 것을 볼 수 있습니다 CustomView
. 별도의 프레임 워크에 있지 않다는 점을 제외하고는 OtherView
과 동일한을 만들었습니다 CustomView
. 그러나 두 클래스 사이의 스토리 보드에는 동일한 문제가 지속됩니다.
여기 CustomView.m
에 CustomViews
프레임 워크 로 빌드하기 위해 포함 되었음을 나타내는 스크린 샷 이 있습니다 .
한편, 다음 스크린 샷은 몇 가지 사항을 나타냅니다.
CustomViews.framework
메인 프로젝트에 적절하게 포함됩니다.OtherView.m
또한 컴파일 소스로 포함되어, 뭔가 잘못 그래서하더라도CustomView
,OtherView
그것은 동일한 오류가 발생하지만, 작동합니다.Main.storyboard
그리고LaunchScreen.xib
빨간색으로 나타나고있다. 내가 왜 아무 생각이없고, 이유에 사소한 단서하지 않은LaunchScreen.xib
내가 다른 프로젝트보고 후 말할 수 있지만, (I이 파일을 손도 안)해야을,Main.storyboard
또한 그 프로젝트에 적색으로 표시하고 난IB_DESIGNABLE
또는IBInspectable
거기 에서 아무것도하지 않습니다 .
나는 이것을 여러 번 시도하고 재 시도했습니다. 집에있는 내 컴퓨터에서 매번 작동합니다.이 질문에 설명 된 문제를 집에서 재현 할 수 없습니다. 직장에서는 작동하지 않습니다. 이 질문에 설명 된 문제는 매번 발생합니다.
두 컴퓨터 모두 올해 새로 구입 한 Mac Mini입니다 (새 모델이 아닌 2012 년 후반 모델). 두 컴퓨터 모두 OS X Yosemite 10.10을 실행합니다. 두 컴퓨터 모두 Xcode 버전 6.1을 실행하고 있습니다. 집에서 빌드는 (6A1052d)입니다. 오늘 아침 두 컴퓨터가 동일한 Xcode 빌드를 실행하고 있음을 확인할 수 있습니다.
다른 사람들은 나에게 나쁜 RAM 일 수 있다고 제안했습니다. 그것은 나에게 멀어 보인다. 프로젝트를 여러 번 다시 시작하고 컴퓨터를 여러 번 다시 시작했습니다. 약 6 개월 된 컴퓨터에 불량 RAM이 있고 다른 문제가 발생하고이 문제의 일관성이 떨어질 것 같습니다. 그러나이 정확한 문제는 전체 프로젝트를 처음부터 여러 번 다시 시작하고 컴퓨터에서 전체를 다시 시작하더라도 지속됩니다.
실제로이 프로젝트를 컴파일하고 실행 IBInspectable
하면 스토리 보드에 표시 될 것으로 예상하는대로 속성이 있는 사용자 지정 뷰가 실제로 표시 된다는 점에 유의해야 합니다. 그러나 IB_DESIGNABLE
및 IBInspectable
지시문이 사용자 정의 런타임 속성으로 생성되기 때문에이 경우에도 마찬가지라고 생각합니다 .