2017-07-30 56 views
1

我想創建一個自定義UITextField並設置一個自定義bordercolor。我也爲borderColor創建了一個IBInspectable屬性,如果我使用set和get方法,我可以使用Storyboard進行設置。創建自定義IBDesignable UITextField

現在,而不是我想要做的是有一個預先定義的邊框顏色值(這是默認值),所以我想調用didSet方法,並在那裏做設置。我不知道該怎麼做。

@IBDesignable class KGIBDesignableTextField: UITextField { 

@IBInspectable var borderColor: UIColor = UIColor.KGColorPalette.entryBoxBorderColor { 
    didSet { 
     setup() 
    } 
} 


override func awakeFromNib() { 
    super.awakeFromNib() 
    setup() 
} 
override func layoutSubviews() { 
    super.layoutSubviews() 
    setup() 
} 
override func prepareForInterfaceBuilder() { 
    super.prepareForInterfaceBuilder() 
    setup() 
} 


func setup(){ 
    textColor = UIColor.KGColorPalette.textEntryFontColor 
    self.layer.borderColor=(UIColor.KGColorPalette.entryBoxBorderColor as! CGColor) 
    backgroundColor=UIColor.KGColorPalette.entryBoxShadeFillColor 
    font = UIFont(name: "Helvetica", size: 14) 
    textAlignment = .left 


} 
:在故事板

error: IB Designables: Failed to update auto layout status: The agent crashed

代碼

self.layer.borderColor=(UIColor.KGColorPalette.entryBoxBorderColor as! CGColor) 

錯誤 - 默認值不工作,如果我在該行的故事板導入給出了一個錯誤

}

如果它將幫助,我檢查了我的Xcode崩潰日誌以及和它給了下面的錯誤 -

Thread 0 Crashed: 0 com.kapsymtech.ios.KGCustomUIComponentsTarget 0x0000000116932dd8 _TFC26KGCustomUIComponentsTarget23KGIBDesignableTextField5setupfT_T_ + 152 (KGIBDesignableTextField.swift:65) 1 com.kapsymtech.ios.KGCustomUIComponentsTarget 0x0000000116932acb _TFC26KGCustomUIComponentsTarget23KGIBDesignableTextFieldcfT5frameVSC6CGRect_S0_ + 331 (KGIBDesignableTextField.swift:56) 2 com.kapsymtech.ios.KGCustomUIComponentsTarget 0x0000000116932ba7 _TToFC26KGCustomUIComponentsTarget23KGIBDesignableTextFieldcfT5frameVSC6CGRect_S0_ + 71 3 com.apple.IBCocoaTouchToolFoundation 0x0000000107a8fb23 -[UIView(IBCocoaTouchToolIntegration) initWithMarshalledValues:orderedKeys:ignoredKeys:globalMarshallingContext:] + 131 4 com.apple.IBCocoaTouchToolFoundation 0x0000000107aaf51c -[IBCocoaTouchToolObjectPackage initWithRequest:globalMarshallingContext:] + 3100 5 com.apple.IBCocoaTouchToolFoundation 0x0000000107aae143 +[IBCocoaTouchToolObjectPackage objectPackageFromRequest:] + 67 6 com.apple.IBCocoaTouchToolFoundation 0x0000000107ab1311 +[IBCocoaTouchToolObjectPackage decodeWithBinaryUnarchiver:] + 106 7 com.apple.dt.IBFoundation 0x000000010a493aa3 -[IBBinaryUnarchiver decodeObject] + 112 8 com.apple.dt.IBFoundation 0x000000010a51f724 -[IBObjectBasedMarshallingRequest initWithBinaryUnarchiver:] + 135 9 com.apple.dt.IBAutolayoutFoundation 0x000000010a3d73bb -[IBAutolayoutOperationMarshallingRequest initWithBinaryUnarchiver:] + 59 10 com.apple.dt.IBFoundation 0x000000010a48b335 +[NSObject(IBBinaryArchivingAdditions) decodeWithBinaryUnarchiver:] + 65 11 com.apple.dt.IBFoundation 0x000000010a493aa3 -[IBBinaryUnarchiver decodeObject] + 112 12 com.apple.dt.IBFoundation 0x000000010a559ffa -[IBMessageReceiveChannel deliverMessage:toTarget:withArguments:context:result:] + 393 13 com.apple.dt.IBFoundation 0x000000010a559a65 88-[IBMessageReceiveChannel runBlockingReceiveLoopNotifyingQueue:notifyingTarget:context:]_block_invoke + 120 14 libdispatch.dylib 0x000000010dbe3792 _dispatch_client_callout + 8 15 libdispatch.dylib 0x000000010dbcc4e0 _dispatch_barrier_sync_f_slow_invoke + 292 16 libdispatch.dylib 0x000000010dbe3792 _dispatch_client_callout + 8 17 libdispatch.dylib 0x000000010dbcb247 _dispatch_main_queue_callback_4CF + 1041 18 com.apple.CoreFoundation 0x000000010bac1909 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE + 9 19 com.apple.CoreFoundation 0x000000010ba87ae4 __CFRunLoopRun + 2164 20 com.apple.CoreFoundation 0x000000010ba87016 CFRunLoopRunSpecific + 406 21 com.apple.Foundation 0x000000010a8f3600 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 274 22 com.apple.dt.IBFoundation 0x000000010a525bbc -[IBAbstractPlatformTool startServingReceiveChannel:] + 465 23 com.apple.dt.IBFoundation 0x000000010a525d85 -[IBAbstractPlatformTool startServingWriteDescriptor:readDescriptor:] + 119 24 com.apple.dt.IBFoundation 0x000000010a52689e +[IBAbstractPlatformTool main] + 1186 25 IBDesignablesAgentCocoaTouch 0x0000000107a04ba7 main + 34 26 libdyld.dylib 0x000000010dc2c65d start + 1

回答

1

改變這一行到:

self.layer.borderColor = UIColor.KGColorPalette.entryBoxBorderColor.cgColor 

來自:

self.layer.borderColor=(UIColor.KGColorPalette.entryBoxBorderColor as! CGColor) 

你can not typecast UIColor to CGColor。強制類型轉換會使應用程序崩潰。

+0

謝謝你減少了編譯時錯誤。這是我身邊的一個愚蠢的錯誤。雖然我有另一個問題。當我運行的應用程序,但我沒有看到它的用戶界面,但:( –

+0

很高興知道崩潰修復與我的答案。您可能需要發佈一個問題,關於這個新問題的更多細節。可能也添加一些截圖 – adev

+0

感謝您的幫助,我會先嚐試自己解決問題,然後再安裝一個新的問題:) –