【「ViewController」のコード】
import UIKit
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
@IBOutlet var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(FieldTableViewCell.nib(), forCellReuseIdentifier: FieldTableViewCell.identifier)
tableView.register(MyTableViewCell.nib(), forCellReuseIdentifier: MyTableViewCell.identifier)
tableView.delegate = self
tableView.dataSource = self
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row > 5 {
let customCell = tableView.dequeueReusableCell(withIdentifier: MyTableViewCell.identifier, for: indexPath) as! MyTableViewCell
customCell.configure(with: "Custom Cell", imageName: "gear")
return customCell
}
if indexPath.row > 3 {
let fieldCell = tableView.dequeueReusableCell(withIdentifier: FieldTableViewCell.identifier, for: indexPath) as! FieldTableViewCell
return fieldCell
}
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = "Hello World"
let mySwitch = UISwitch()
mySwitch.addTarget(self, action: #selector(didChangeSwitch(_:)), for: .valueChanged)
mySwitch.isOn = true
cell.accessoryView = mySwitch
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 70
}
@objc func didChangeSwitch(_ sender:UISwitch) {
if sender.isOn {
print("User turned it on")
} else {
print("its now off")
}
}
}
【「MyTableViewCell」のコード】
import UIKit
class MyTableViewCell: UITableViewCell {
static let identifier = "MyTableViewCell"
static func nib() -> UINib {
return UINib(nibName: "MyTableViewCell", bundle: nil)
}
public func configure(with title: String, imageName: String) {
myLabel.text = title
myImageView.image = UIImage(systemName: imageName)
}
@IBOutlet var myImageView: UIImageView!
@IBOutlet var myLabel:UILabel!
override func awakeFromNib() {
super.awakeFromNib()
myImageView.contentMode = .scaleAspectFit
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
【「FieldTableViewCell」のコード】
import UIKit
class FieldTableViewCell: UITableViewCell,UITextFieldDelegate {
static let identifier = "FieldTableViewCell"
static func nib() -> UINib {
return UINib(nibName: "FieldTableViewCell", bundle: nil)
}
@IBOutlet var textField:UITextField!
override func awakeFromNib() {
super.awakeFromNib()
textField.placeholder = "Enter something..."
textField.delegate = self
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
print("\(textField.text ?? "")")
return true
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
参考動画
Custom Table View Cells in Swift 5 & Xcode 12 (2022)
https://www.youtube.com/watch?v=OQYqGM5_wVY&list=PL0aWQSxmqLHaVEtj4oUrBNFGhp8jcOFQd&index=6&t=10s