我有一个用var UIButton实现的简单子类:IBDesignableIBInspectable
var UIButton
IBDesignableIBInspectable
@IBDesignable class Button: UIButton { @IBInspectable var borderColor: UIColor = UIColor.whiteColor() { didSet { layer.borderColor = borderColor.CGColor } } }
我没有在框架中使用它,它正在Interface Builder中按预期工作,但是,一旦将此子类添加到Tests目标中,它就会停止实时渲染,并且出现以下错误:
Interface Builder
Tests
Main.storyboard: error: IB Designables: Failed to update auto layout status: dlopen(TestTests.xctest, 1): Library not loaded: @rpath/XCTest.framework/XCTest Referenced from: TestTests.xctest Reason: image not found Main.storyboard: error: IB Designables: Failed to render instance of Button: dlopen(TestTests.xctest, 1): Library not loaded: @rpath/XCTest.framework/XCTest Referenced from: TestTests.xctest Reason: image not found
如果删除IBDesignable和IBInspectablevar,错误就会消失-不幸的是,Interface Builder中的实时渲染也会消失。
IBDesignable
IBInspectablevar
如何针对IBDesignable没有这些错误的课程进行测试?
起初,我认为这是Xcode中的一种错误。以下是 我发现的解决方法:
第1步
将您的类和属性标记为public。
public
@IBDesignable public class Button: UIButton { @IBInspectable public var borderColor: UIColor = UIColor.whiteColor() { didSet { layer.borderColor = borderColor.CGColor } } @IBInspectable public var borderWidth:CGFloat = 0.0 { didSet { layer.borderWidth = borderWidth } } }
步骤 2
从“测试”模块导入应用程序模块。
例如,假设您的应用程序被命名为MyGreatApp, in your MyGreatAppTests/MyGreatAppTests.swift:
MyGreatApp
MyGreatAppTests/MyGreatAppTests.swift
import UIKit import XCTest import MyGreatApp class MyGreatAppTests: XCTestCase { func testExample() { let btn = Button() btn.borderColor = UIColor.redColor() XCTAssertEqual(UIColor(CGColor:btn.layer.borderColor), UIColor.redColor(), "borderColor") } }
您无需将“ Button.swift”添加到“测试”目标。
步骤3(适用于Swift)
在情节提要中,为任何自定义 类显式选择模块MyGreatApp,而不是让Xcode使用当前模块。