- Small Sample
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
}
// MARK: - TableView Delegate & DataSource
// Row Count
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 100
}
// Generate Cell
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath)
cell.textLabel?.text = "IndexPath.row = " + String(indexPath.row)
return cell
}
// Select Cell
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath as IndexPath, animated: true)
print("Touch Index = \(indexPath.row)")
}
}
- Samll Sample2
import UIKit
class ViewController: UIViewController {
var items: [String] = []
enum SectionType {
case header
case contents
static var count: Int {
let type: [SectionType] = [.header, .contents]
return type.count
}
}
@IBOutlet weak var tableView: UITableView! {
didSet {
tableView.dataSource = self
tableView.delegate = self
}
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(CustomCell.self, forCellReuseIdentifier: "CustomCell")
}
}
// MARK: - UITableViewDataSource
extension ViewController: UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return SectionType.count
}
// Row Count
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
// Generate Cell
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as? CustomCell {
cell.textLabel?.text = "Section = \(String(indexPath.section)), row = \(String(indexPath.row))"
return cell
}
return UITableViewCell()
}
}
// MARK: - UITableViewDelegate
extension ViewController: UITableViewDelegate {
// Select Cell
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath as IndexPath, animated: true)
print("Touch Section = \(String(indexPath.section)), row = \(String(indexPath.row))")
}
}
// MARK: - CustomCell
class CustomCell: UITableViewCell {
}
- Small Sample3
import UIKit
class ViewController: UIViewController {
var items: [String] = ["a", "b", "c"]
@IBOutlet weak var tableView: UITableView! {
didSet {
tableView.dataSource = self
tableView.delegate = self
}
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(UINib(nibName: "CustomCell", bundle: nil), forCellReuseIdentifier: "CustomCell")
}
}
// MARK: - UITableViewDataSource
extension ViewController: UITableViewDataSource {
// Section Count
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
// Row Count
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
// Generate Cell
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as? CustomCell {
cell.textLabel?.text = "Section = \(String(indexPath.section)), row = \(String(indexPath.row)), item = \(items[indexPath.row])"
return cell
}
return UITableViewCell()
}
}
// MARK: - UITableViewDelegate
extension ViewController: UITableViewDelegate {
// Select Cell
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath as IndexPath, animated: true)
print("Touch Section = \(String(indexPath.section)), row = \(String(indexPath.row))")
}
}
// MARK: - CustomCell
class CustomCell: UITableViewCell {
}
UITableViewCell Auto Calc
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 44
}
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
}
// Data Array
var dataArray = ["One","Two","Three","Four","Five"]
// MARK: - TableView Delegate & DataSource
// Section Count
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
// Row Count
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dataArray.count
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 44
}
// Generate Cell
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath)
cell.textLabel?.text = dataArray[indexPath.row]
return cell
}
// Select Cell
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath as IndexPath, animated: true)
}
}
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var myTableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
myTableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")
}
// Data Array
var dataArray = ["One","Two","Three","Four","Five"]
// MARK: - TableView Delegate & DataSource
// Section Count
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
// Row Count
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dataArray.count
}
// Row Height
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 44
}
// Generate Cell
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
cell.textLabel?.text = dataArray[indexPath.row]
cell.accessoryType = .DetailDisclosureButton
return cell
}
// Select Cell
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
print("Cell Tap - ",indexPath.row)
}
func tableView(tableView: UITableView, accessoryButtonTappedForRowWithIndexPath indexPath: NSIndexPath) {
print("Button Tap - ",indexPath.row)
}
}
★ Simple Template 2
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.estimatedRowHeight = 20
tableView.rowHeight = UITableViewAutomaticDimension
tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")
}
// Data Array
var dataArray = ["複数行対応1、複数行対応1、複数行対応1、複数行対応1","複数行対応2、複数行対応2","複数行対応3、複数行対応3、複数行対応3、複数行対応3、複数行対応3、複数行対応3、複数行対応3","複数行対応4","複数行対応5、複数行対応5、複数行対応5、複数行対応5、"]
// MARK: - TableView Delegate & DataSource
// Row Count
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dataArray.count
}
// Generate Cell
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
cell.textLabel?.numberOfLines = 0
cell.textLabel?.text = dataArray[indexPath.row]
return cell
}
// Select Cell
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
print("Cell Tap - ",indexPath.row)
}
}
★ Swift3
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.estimatedRowHeight = 20
tableView.rowHeight = UITableViewAutomaticDimension
}
// Data Array
var dataArray = ["複数行対応1、複数行対応1、複数行対応1、複数行対応1","複数行対応2、複数行対応2","複数行対応3、複数行対応3、複数行対応3、複数行対応3、複数行対応3、複数行対応3、複数行対応3","複数行対応4","複数行対応5、複数行対応5、複数行対応5、複数行対応5、"]
// MARK: - TableView Delegate & DataSource
// Row Count
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dataArray.count
}
// Generate Cell
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath)
cell.textLabel?.numberOfLines = 0
cell.textLabel?.text = dataArray[indexPath.row]
return cell
}
// Select Cell
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath as IndexPath, animated: true)
print("Cell Tap - ",indexPath.row)
}
}
★ UITableViewCellをxibから読み込む場合
Project: TableViewCell xib
import UIKit
class ViewController1: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// Tableがない部分のSeparatorを非表示
tableView.tableFooterView = UIView()
tableView.estimatedRowHeight = 20
tableView.rowHeight = UITableViewAutomaticDimension
tableView.registerNib(UINib(nibName: "CustomCell", bundle: nil), forCellReuseIdentifier: "CustomCell")
}
// Data Array
var dataArray = ["One","Two","Three","Four","Five"]
// MARK: - TableView Delegate & DataSource
// Row Count
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dataArray.count
}
// Generate Cell
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("CustomCell", forIndexPath: indexPath) as! CustomCell1
cell.textLabel?.text = dataArray[indexPath.row]
// Separatorの左のマージンを無しにする
cell.layoutMargins = UIEdgeInsetsZero
return cell
}
// Select Cell
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
print("Cell Tap - ",indexPath.row)
}
}
★ CustomCellを定義しないでviewWithTag()により値を設定する場合
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
// Data Array
var dataArray: [(String, String)] = [("Image1","Test Text1"),("Image2","Test Text2"),("Image3","Test Text3"),("Image4","Test Text4"),("Image5","Test Text5")]
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.estimatedRowHeight = 20
tableView.rowHeight = UITableViewAutomaticDimension
}
// MARK: - TableView Delegate & DataSource
// Row Count
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dataArray.count
}
// Generate Cell
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
let imageView = cell.contentView.viewWithTag(1) as! UIImageView
imageView.image = UIImage(named: dataArray[indexPath.row].0)
let label = cell.contentView.viewWithTag(2) as! UILabel
label.text = dataArray[indexPath.row].1
return cell
}
// Select Cell
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
print("Cell Tap - ",indexPath.row)
}
}
★ UITableViewの背景色にグラデーションをかける
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
let startColor = UIColor.yellow
let endColor = UIColor.red
override func viewDidLoad() {
super.viewDidLoad()
tableView.estimatedRowHeight = 20
tableView.rowHeight = UITableViewAutomaticDimension
setTableViewBackgroundGradient(sender: tableView, startColor, endColor)
}
func setTableViewBackgroundGradient(sender: UITableView, _ topColor:UIColor, _ bottomColor:UIColor) {
let gradientBackgroundColors = [topColor.cgColor, bottomColor.cgColor]
let gradientLocations = [0.0,1.0]
let gradientLayer = CAGradientLayer()
gradientLayer.colors = gradientBackgroundColors
gradientLayer.locations = gradientLocations as [NSNumber]?
gradientLayer.frame = sender.bounds
let backgroundView = UIView(frame: sender.bounds)
backgroundView.layer.insertSublayer(gradientLayer, at: 0)
sender.backgroundView = backgroundView
}
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
cell.backgroundColor = UIColor.clear
}
// MARK: - TableView Delegate & DataSource
// Row Count
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 15
}
// Generate Cell
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath)
return cell
}
}