web-dev-qa-db-ja.com

UITableView-registerClass with Swift

SwiftでtableView.registerClassメソッドを使用すると問題が発生する人はいますか?

それはもはやコード補完に含まれていません(手動で入力した場合は使用できません)が、まだヘッダーにあります...

Code Completion

UITableView headers

56

それは私にとって完璧に機能します。

self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")

上記のとおりです。

101
Woodstock

For Swift 2.2クラスからのデフォルトセルの登録

self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "DefaultCell")



For Swift 3.0クラスからのデフォルトセルの登録

self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "DefaultCell")



For Swift 2.2 Nibからのデフォルトセルの登録

self.tableView.registerNib(UINib(nibName: "CustomCellName", bundle: nil), forCellReuseIdentifier: "CustomCellIdentifer")



For Swift 3.0 Nibからのデフォルトセルに登録する

self.tableView.registerNib(UINib(nibName: "CustomCellName", bundle: nil), forCellReuseIdentifier: "CustomCellName")

注:ストーリーボードで作成されたセルはプロトタイプセルと呼ばれ、Nibのようなプロトタイプセルを登録する手順があります。また、以下のようにセル識別子を設定することを忘れないでください。 enter image description here

14
Dinesh Katwal

Swiftはもう一度名前を変更しました

tableView .register(UITableViewCell.self、forCellReuseIdentifier: "DefaultCell")

彼らがこの特定のネーミングについてそんなに悩まされた理由を本当に理解していない

3
Qiulang

Swift 4

self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
1
Rinju Jain

Swift 3の場合、これを参照してください。動作します!

あなたの中にviewdidload関数

self.tableView.register(UITableViewCell.self、forCellReuseIdentifier: "LabelCell")

0
Amit Thakur

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  {
    }
0
GSK

Swift 5に更新

デフォルトセルを使用している場合は、viewDidLoadにTableViewセルを登録します

tableView.register(UITableViewCell.self, forCellReuseIdentifier: "MyTableCell")

カスタムNib/XIBセルを使用している場合は、viewDidLoadにTableViewセルを登録します

tableView.register(UINib(nibName: "MyCustomCell", bundle: nil), forCellReuseIdentifier: "MyCustomCell")
0
swiftBoy