Tôi có một lớp con của UIView
được gọi là MyView
mà tôi đang tạo.Sử dụng IBDesignable và preparForInterfaceBuilder với một UILabel
Trong đó có UILabel
(điều này được thêm vào trong mã không có trong InterfaceBuilder vì lý do).
Tôi sau đó có một thuộc tính trên MyView
được gọi là color
.
Điều tôi muốn là có Trình tạo giao diện có thể chọn color
và sau đó hiển thị nhãn với phông chữ được đặt thành màu đó.
Trong mã của tôi, tôi có ...
@IBDesignable class MyView: UIView {
private let textLabel = UILabel()
@IBInspectable var color: UIColor = .blackColor() {
didSet {
textLabel.textColor = color
}
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialSetup()
}
override init(frame: CGRect) {
super.init(frame: frame)
initialSetup()
}
private func initialSetup() -> Void {
self.backgroundColor = .clearColor()
textLabel.textAlignment = .Center
textLabel.numberOfLines = 0
addSubview(textLabel)
}
override func layoutSubviews() {
super.layoutSubviews()
textLabel.frame = bounds
}
// I have no idea what I'm doing here?!
override func prepareForInterfaceBuilder() {
// should I create a label specifically for here?
// or should I use the property textLabel?
textLabel.text = "Hello, world!" // setting place holder IB text?
textLabel.textColor = color
textLabel.font = .systemFontOfSize(21)
textLabel.textAlignment = .Center
textLabel.numberOfLines = 0
// do I need to add sub view?
}
}
IBInspectable
Trong IB tôi có thể thấy tài sản màu đó và tôi có thể thiết lập nó. Khó chịu nó có một giá trị mặc định của .clearColor() mặc dù không phải là màu tôi đặt trong mã. Có cách nào để khắc phục điều đó không?
IBDesignable
Khi tôi đặt tầm nhìn cho các InterfaceBuilder nó cho thấy tất cả các thuộc tính inspectable nhưng không được hiển thị trong giao diện thực tế.
Khi tôi chạy nó, tất cả đều hoạt động tốt. Tôi chỉ muốn có thể có được một cái gì đó làm việc (khác với drawRect) trong IB. Tôi tìm thấy một thiếu tài liệu rõ ràng mặc dù.
Edit - Cảnh báo
Tôi chỉ nhận thấy rằng tôi nhận được xây dựng lỗi/cảnh báo nói ...
cảnh báo: IB Designables: Bỏ qua người dùng định nghĩa thuộc tính thời gian chạy cho con đường quan trọng "màu "ví dụ về" UIView ". Nhấn một ngoại lệ khi cố đặt giá trị của nó: [setValue: forUndefinedKey:]: lớp này không phải là giá trị khóa mã hóa tuân thủ cho màu khóa.
Điều này có lẽ sẽ thay đổi giải pháp :)
Vâng, hiện tại tôi đang nhận được "Phân đoạn lỗi: 11" khi cố gắng chạy nên không biết chuyện gì đang diễn ra. Đó có thể là nguyên nhân của việc này. Vui mừng khi biết tôi đã nhận được mã thực sự ngay. Tôi đã cài đặt Xcode 4 (lý do) ngày hôm nay vì vậy tôi tự hỏi, nếu cài đặt đã sai lầm xung quanh với trình biên dịch hoặc một cái gì đó ?! Cảm ơn mặc dù. Sẽ giữ cho dự án Swift của tôi: D – Fogmeister
OMLG! Lỗi seg là vì tôi đã sử dụng '.clearColor()' trong một thuộc tính thay vì 'UIColor.clearColor()' nhưng không có lỗi hiển thị trong mã. Dù sao, tất cả đang làm việc ngay bây giờ: D Cảm ơn! – Fogmeister