简体   繁体   中英

How to utilize a custom tableview cell nib in iOS with a swipe table view controller as the cell's default controller

I am a beginner and I'm having some issues with an iOS app I'm creating. I am utilizing the SwipeCellKit package to have swipeable cells for my tableViews. I would also like to use a custom cell to display birthdays. I created a custom tableView cell and nib. The issue that I'm running into is properly coding the nib into my birthday tableView controller so it will display the information. Below is a picture of my code. I'd really appreciate if someone could point me in the right direction.

import UIKit
import RealmSwift
import UserNotifications

class BirthdayTableViewController: SwipeTableViewController {

@IBOutlet weak var name: UILabel!
@IBOutlet weak var birthdayLabel: UILabel!
@IBOutlet weak var age: UILabel!

let realm = try! Realm()

var birthdays: Results<Birthday>?
let dateFormatter = DateFormatter()



override func viewDidLoad() {
    super.viewDidLoad()


       
         tableView.register(BirthdayTableViewCell.nib(), forCellReuseIdentifier: BirthdayTableViewCell.identifier)
        
        tableView.rowHeight = 100
        tableView.separatorStyle = .none
    }
    
    override func viewWillAppear(_ animated: Bool) {
        loadBirthdays()
    }
    
    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return birthdays?.count ?? 1
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        let cell = super.tableView(tableView, cellForRowAt: indexPath)
            
        
        guard let birthdayCell = (tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! BirthdayTableViewCell) else {fatalError()}

        let birthday = birthdays?[indexPath.row]
        
        let firstName = birthday?.firstName ?? ""
        let lastName = birthday?.lastName ?? ""
        name?.text = firstName + " " + lastName

        if let date = birthday?.birthdate as Date? {
            birthdayLabel?.text = dateFormatter.string(from: date)
        } else {
            birthdayLabel.text = " "
        }
        
        return cell
        
    }

[Beginning of Code][1]
[TableView Methods][2]


  [1]: https://i.stack.imgur.com/fZspG.png
  [2]: https://i.stack.imgur.com/9IlD1.png

The app crashes due to casting a result of

tableView.dequeueReusableCell(withIdentifier:for:)

with force unwrap as! which returns non optional object.

To solve the error, just change it to as?

There is another thing which can lead to an error as well, you typed direct identifier of a cell instead using the identifier BirthdayTableViewCell.identifier

guard let birthdayCell = (tableView.dequeueReusableCell(withIdentifier: BirthdayTableViewCell.identifier, for: indexPath) as? BirthdayTableViewCell) else {fatalError()}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM