your programing

UITableView-Swift로 registerClass

lovepro 2020. 12. 29. 08:07
반응형

UITableView-Swift로 registerClass


다른 사람이 tableView.registerClassSwift와 함께 방법을 사용하는 데 문제가 있습니까?

더 이상 코드 완성 기능이 제공되지 않지만 (수동으로 입력 한 경우에도 사용할 수 없음) 여전히 헤더에 있습니다.

코드 완성

UITableView 헤더


그것은 나를 위해 완벽하게 작동합니다.

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

반응형