인터페이스 빌더에서 사용자 정의 테이블 뷰 셀을 시각화하는 데 문제가 있습니다.스위프트 3 : 설계 가능한 테이블 뷰 셀
누구든지 @Designable
테이블 뷰 셀을 만드는 방법을 알고 있습니까?
테이블 뷰가있는 스토리 보드에서 사용자 정의 테이블보기 셀을 가져 오면 배경색 만 작동합니다. 표보기 셀 내에서 레이블의 텍스트를 설정하려고하면 인터페이스 빌더가 충돌합니다.
내 설정은 다음 방법에서 호출 :
- override public init(style: UITableViewCellStyle, reuseIdentifier: String?)
- required public init?(coder aDecoder: NSCoder)
나는 나의 레이블이 순간에 초기화되지 않기 때문에 그것의 생각?
코드 :
import UIKit
@IBDesignable class ProgressHeaderTableViewCell: UITableViewCell {
@IBOutlet weak var headerLabel: UILabel!
// MARK: - View methods
override public init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.setupNib()
}
// MARK: - NSCoding
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setupNib()
}
func setupNib(){
self.backgroundColor = UIColor.blue
// self.headerLabel.text = "Hello world"
}
}
업데이트 코드 :
import UIKit
@IBDesignable class CustomTableView: UITableViewCell {
@IBOutlet weak var headerLabel: UILabel!
// MARK: - View methods
override func prepareForInterfaceBuilder() {
self.awakeFromNib()
}
override public init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
//check that there are no current subviews
if self.subviews.count == 0 {
self.setupNib()
}
}
// MARK: - NSCoding
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
//check that there are no current subviews
if self.subviews.count == 0 {
self.setupNib()
}
}
override func awakeFromNib() {
super.awakeFromNib()
self.backgroundColor = UIColor.blue
if headerLabel != nil {
self.headerLabel.text = "Hello world"
}
}
func setupNib(){
let bundle = Bundle(for: CustomTableView.self)
guard let customView = bundle.loadNibNamed("CustomTableView",owner: self, options: nil)?.first as? CustomTableView else {
return
}
customView.frame = self.bounds
self.addSubview(customView)
}
}
감사합니다!
tbaleView 데이터 소스 메소드를 추가하십시오. – CodeChanger
데이터 원본 메서드가 추가되었습니다. 내 디자인 가능한 UITableViewCell 안에 레이블을 설정하려고하는데, 이는 내 레이블에 IBOutlet이 있다는 것을 의미합니까? 그 때 초기화되어서는 안됩니까? – PAK
더 명확히하기 위해 몇 가지 코드를 게시 할 수 있습니까? – CodeChanger