В настоящее время я работаю над iOS-приложением, используя Xcode 6.1.1 и Objectiv-C. В приложении есть несколько пользовательских подклассов. Один из них является подклассом UIButton, другой - подклассом UIView. Эти пользовательские виды отмечены как IB_DESIGNABLE и имеют несколько свойств, которые являются IBInspectable. Я также использую Unit Tests в проекте Xcode. Каждый раз, когда я открываю раскадровку, Xcodes дает мне несколько ошибок.IB Designables Ошибка при использовании UnitTests
IB Designables
Failed to update auto layout status: dlopen(UnitTests.xctest, 1): Library not loaded: @rpath/XCTest.framework/XCTest
Referenced from UnitTests.xctest
Reason: image not found
IB Designables
Failed to render instance of CustomRadioButton: dlopen(UnitTests.xctest, 1): Library not loades: @rpath/XCTest.framework/XCTest
Referenced from UnitTests.xctest
Reason: image not found
Когда я удаляю инструкцию IB_DESIGNABLE, ошибки уходят. К сожалению, мне нужно, чтобы они были IB_DESIGNABLE. Я нашел сообщение в StackOverflow, у которого есть тот же вопрос, но использует Swift. Предлагаемое решение не работает с использованием Objectiv-C, поэтому функции, используемые для решения проблемы, не существуют (насколько мне известно) в Objective-C. Вот ссылка на вопрос: IBDesignable Errors When Adding to Tests Target
У кого-нибудь есть идея, как это исправить? Я также пробовал использовать Xcode 6.2 beta, но проблема не устранена.
В качестве одного комментария запрошенной, вот код к одному из моих пользовательских просмотров:
CustomButton.h #import
@interface CustomButton : UIButton
@property (nonatomic, strong) UIFont *titleFont UI_APPEARANCE_SELECTOR;
@property (nonatomic, assign) IBInspectable BOOL useShapedForm;
@property (nonatomic, strong) IBInspectable UIColor *defaultColor;
@property (nonatomic, strong) IBInspectable UIColor *selectedColor;
@property (nonatomic, strong) IBInspectable UIColor *disabledColor;
@property (nonatomic, assign) IBInspectable CGFloat cornerRadius;
- (void)setDefaults;
- (IBAction)touchDown:(id)sender;
- (IBAction)handleButtonClick:(id)sender;
@end
CustomButton.m #import "CustomButton.h"
@implementation CustomButton
#pragma mark - Initialisation
- (instancetype)init
{
if (self = [super init]) {
[self setDefaults];
}
return self;
}
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
[self setDefaults];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super initWithCoder:aDecoder]) {
[self setDefaults];
}
return self;
}
- (void)setDefaults
{
self.useShapedForm = NO;
self.cornerRadius = self.useShapedForm ? 5 : 0;
self.defaultColor = self.useShapedForm ? [UIColor rsm_bg_btn_2] : [UIColor clearColor];
self.selectedColor = self.useShapedForm ? [UIColor rsm_bg_btn_1] : [UIColor clearColor];
self.disabledColor = self.useShapedForm ? [UIColor rsm_bg_btn_3] : [UIColor clearColor];
if (!self.useShapedForm) {
[self setTitleColor:[UIColor rsm_font_333_dark] forState:UIControlStateNormal];
[self setTitleColor:[UIColor rsm_bg_red] forState:UIControlStateSelected];
[self setTitleColor:[UIColor rsm_font_333_light] forState:UIControlStateDisabled];
} else{
[self setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
}
}
#pragma mark - Properties
- (void)setTitleFont:(UIFont *)titleFont
{
if (self.titleFont != titleFont) {
self.titleFont = titleFont;
[self.titleLabel setFont:self.titleFont];
}
}
- (void)setTitleEdgeInsets:(UIEdgeInsets)titleEdgeInsets
{
UIEdgeInsets insets = UIEdgeInsetsMake(titleEdgeInsets.top - 10,
titleEdgeInsets.left,
titleEdgeInsets.bottom,
titleEdgeInsets.right);
[super setTitleEdgeInsets:insets];
}
- (CGSize)intrinsicContentSize
{
CGSize defaultMetric = [super intrinsicContentSize];
// TODO: Metrics anpassen!!
return CGSizeMake(defaultMetric.width, 39);
}
#pragma mark - Private Methods
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
if (self.useShapedForm) {
[self drawRSMShape];
}
}
#pragma mark - Public Methods
- (void)drawRSMShape
{
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.bounds
byRoundingCorners:UIRectCornerTopRight | UIRectCornerBottomRight | UIRectCornerBottomLeft
cornerRadii:CGSizeMake(self.cornerRadius, self.cornerRadius)];
[path closePath];
if (self.selected) {
[self.selectedColor setFill];
}
else if (self.enabled){
[self.defaultColor setFill];
}
else {
[self.disabledColor setFill];
}
[path fill];
}
- (IBAction)touchDown:(id)sender
{
RSMButton *button = (RSMButton *)sender;
button.highlighted = NO;
}
- (IBAction)handleButtonClick:(id)sender
{
}
@end
Проблема будет более понятной, если мы сможем увидеть код. –
Я добавил код к одному из моих пользовательских представлений на вопрос. – naglerrr