是否可以在上設置UILabel
(或圖片如果使用UIImageView
)的設計時間文本iOS 8?如果是這樣,如何?iOS在故事板上添加設計時文本
基本上我需要的是在編譯之前不要清空我的所有標籤,以便它在從網絡加載實際數據之前不顯示虛擬數據。以編程方式清除所有網點的算法並不是一個很好的解決方案,因爲它是不必要的代碼。
是否可以在上設置UILabel
(或圖片如果使用UIImageView
)的設計時間文本iOS 8?如果是這樣,如何?iOS在故事板上添加設計時文本
基本上我需要的是在編譯之前不要清空我的所有標籤,以便它在從網絡加載實際數據之前不顯示虛擬數據。以編程方式清除所有網點的算法並不是一個很好的解決方案,因爲它是不必要的代碼。
你可以嘗試繼承你想擁有設計時屬性的類。下面是的UILabel的一個例子:
import UIKit
class UIPrototypeLabel: UILabel {
@IBInspectable var isPrototype: Bool = false
override func awakeFromNib() {
if (isPrototype) {
self.text = "test"
}
}
然後,在IB,你會看到isPrototype,你可以將它設置爲true或false。
如果需要,您還可以在isPrototype中將缺省值從false更改爲true:Bool = false。如果isPrototype爲true,您也可以更改會發生什麼情況。我讓它使文本「測試」,所以我可以看到反饋時,測試了這一點,所以你可以改變它爲零或「」或其他。
你也可以避開isPrototype bool,並讓這個類總是重置文本。我只是認爲IBInspectable屬性很酷,但如果你只是想讓這個類總是清除標籤文本,那麼你只需刪除布爾和檢查,只是每次都刪除self.text = nil。
對這種方法的認識是你需要使你的所有標籤UIPrototypeLabel獲得這個功能。
還有第二個,可怕的辦法,將這一功能添加到您的所有UILabels的,那就是擴展的UILabel。
import ObjectiveC
import UIKit
// Declare a global var to produce a unique address as the assoc object handle
var AssociatedObjectHandle: UInt8 = 0
extension UILabel {
@IBInspectable var isPrototype:Bool {
get {
var optionalObject:AnyObject? = objc_getAssociatedObject(self, &AssociatedObjectHandle)
if let object:AnyObject = optionalObject {
return object as! Bool
} else {
return false // default value when uninitialized
}
}
set {
objc_setAssociatedObject(self, &AssociatedObjectHandle, newValue, objc_AssociationPolicy(OBJC_ASSOCIATION_RETAIN_NONATOMIC))
}
}
public override func awakeFromNib() {
if (isPrototype) {
self.text = "test"
}
}
}
我愛你的第一種方法,但我認爲我們可以改進的,想幫助我:d?所以基本上,我們在設計時將原型設置爲ON,並在編譯之前關閉。如果我們找到一種方法,在編譯之前不要在ON/OFF之間切換,並且它保持了設計中的行爲。我發現這個鏈接:http://nshipster.com/ibinspectable-ibdesignable/我嘗試使用@IBDesignable,它與TARGET_INTERFACE_BUILDER宏一起工作;但在IB上更改它的值時會「自動編譯」 –
如果您希望標籤具有原型文本,則可以將原型設置爲ON。如果Prototype = ON,只要標籤從NIB喚醒,文本就會在運行時被覆蓋。例如,如果將self.text =「test」行更改爲self.text =「」,那麼無論在設計時何處設置了文本,在運行時它都會設置爲「」,然後你可以手動設置它。每次重新喚醒時,您都必須手動將其重置 –