UITableView-Swift로 registerClass
다른 사람이 tableView.registerClass
Swift와 함께 방법을 사용하는 데 문제가 있습니까?
더 이상 코드 완성 기능이 제공되지 않지만 (수동으로 입력 한 경우에도 사용할 수 없음) 여전히 헤더에 있습니다.
그것은 나를 위해 완벽하게 작동합니다.
self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
위에있는 그대로입니다.
Swift 2.2의 경우 클래스에서 기본 셀에 등록
self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "DefaultCell")
Swift 3.0의 경우 클래스의 기본 셀에 등록
self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "DefaultCell")
Swift 2.2의 경우 Nib에서 기본 셀에 등록
self.tableView.registerNib(UINib(nibName: "CustomCellName", bundle: nil), forCellReuseIdentifier: "CustomCellIdentifer")
Nib의 기본 셀에 대한 Swift 3.0 등록
self.tableView.registerNib(UINib(nibName: "CustomCellName", bundle: nil), forCellReuseIdentifier: "CustomCellName")
참고 : 스토리 보드에서 생성 한 셀을 프로토 타입 셀이라고하며 Nib과 같은 프로토 타입 셀을 등록하는 절차가 있으며, 아래와 같이 셀 식별자를 설정하는 것을 잊지 마십시오.
Swift는 다시 한 번 이름을 변경했습니다.
tableView. 등록 (UITableViewCell.self, forCellReuseIdentifier : "DefaultCell")
이 특정 명명에 대해 왜 그렇게 귀찮게했는지 이해하지 못합니다.
신속한 4
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
신속한 3의 경우 이것을 참조하십시오. 효과가있다!
내부 viewdidload 함수
self.tableView.register (UITableViewCell.self, forCellReuseIdentifier : "LabelCell")
Swift 4 및 4.1. 일반 메서드를 만드는 것은 테이블 셀을 등록하고 대기열에서 빼는 것이 매우 쉽습니다.
override func viewDidLoad() {
super.viewDidLoad()
self.tblView.register(CellProfileOther.self) // cell class name
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: CellProfileOther = tableView.dequeueReusableCell(forIndexPath: indexPath)
return cell
}
extension UITableView {
func register<T:UITableViewCell>(_: T.Type) where T: ReusableView, T: NibLoadableView {
let bundle = Bundle(for: T.self)
let nib = UINib(nibName: T.nibName, bundle: bundle)
self.register(nib, forCellReuseIdentifier: T.defaultReuseIdentifier)
}
func dequeueReusableCell<T:UITableViewCell>(forIndexPath indexPath: IndexPath) -> T where T: ReusableView {
guard let cell = self.dequeueReusableCell(withIdentifier: T.defaultReuseIdentifier, for: indexPath) as? T else {
fatalError("Could not dequeue cell with identifier: \(T.defaultReuseIdentifier)")
}
return cell
}
}
protocol ReusableView: class {
static var defaultReuseIdentifier: String { get }
}
protocol NibLoadableView: class {
static var nibName: String { get }
}
extension ReusableView where Self: UIView {
static var defaultReuseIdentifier: String {
return String(describing: Self.self)
}
}
extension NibLoadableView where Self: UIView {
static var nibName: String {
return String(describing: Self.self)
}
}
// Here is cell class
class CellProfileOther: UITableViewCell, ReusableView, NibLoadableView {
}
Swift 5 업데이트
기본 셀을 사용하는 경우 viewDidLoad에 TableView 셀 등록
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "MyTableCell")
Custom Nib / XIB Cell을 사용하는 경우 viewDidLoad에 TableView 셀 등록
tableView.register(UINib(nibName: "MyCustomCell", bundle: nil), forCellReuseIdentifier: "MyCustomCell")
registerNib 및 registerClass를 호출 한 순서를 전환하면 저에게 효과적이었습니다!
어떤 이유로 내 앱이 다음과 같은 경우 충돌했습니다.
... registerNib .....
... registerClass ...
그러나 다음과 같은 경우 잘 실행되었습니다.
... registerClass ...
... registerNib .....
도움이되기를 바랍니다.
참조 URL : https://stackoverflow.com/questions/25347406/uitableview-registerclass-with-swift
'your programing' 카테고리의 다른 글
객체 대 클래스 대 기능 (0) | 2020.12.29 |
---|---|
isnan ()에 해당하는 Swift는 무엇입니까? (0) | 2020.12.29 |
자바 스크립트에서 CSS 변수에 액세스 (0) | 2020.12.29 |
Google App Engine Flexible 환경의 가격, $ 500 강의 (0) | 2020.12.29 |
Androidx 프로젝트에서 Android 지원을 사용한 라이브러리를 사용할 수 있습니까? (0) | 2020.12.29 |