テープビュー/ココアタッチクラスvsビューコントローラ
table viewを作るには2つの方法があります
1.ビューコントローラから直接テープビューをアップロードする(Table View)
2.テープビューコントローラを使用する
table viewのインスタンスを作成するときにクラスを指定します.
1.ビューコントローラのみをインスタンスクラスとして指定できます.
2.tableviewコントロールを使用する場合は、tableviewコントロールのインスタンスクラスを指定するにはcoa touchクラスを使用する必要があります.
UIViewControllerとUITableViewControllerの2つの方法でTableビューを作成することを決定します.
その前に。
Disclosure Indicator
Detail Disclosure
Checkmark
Detail
Basic
Right Detail
Left Detail
Subtitle
以外のすべてのセル形状はカスタムスタイルでUItableViewCellココアタッチクラスを作成する必要があります!!次の図は、作成したセルの例を示しています.
リボンビューコントローラ
tableviewcellからセルを持ってきて...それ以外に、他の場所のラベルにデータを入れようとしたときにエラーが発生しました. ViewControllerDelegateを継承し、Table Viewを表示します.依頼=selfの後...3番目の画面に移動...どうして?
1.ビューコントローラから直接テープビューをアップロードする(Table View)
2.テープビューコントローラを使用する
table viewのインスタンスを作成するときにクラスを指定します.
1.ビューコントローラのみをインスタンスクラスとして指定できます.
2.tableviewコントロールを使用する場合は、tableviewコントロールのインスタンスクラスを指定するにはcoa touchクラスを使用する必要があります.
UIViewControllerとUITableViewControllerの2つの方法でTableビューを作成することを決定します.
その前に。
UItableViewCellアクセサリ
UItableViewCellスタイル
リボンビューコントローラ
ココアタッチファイルの作成
下図に示すようにtableview datasourceのようなプロトコルが実装されている.import UIKit
class TableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 0
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 0
}
/*
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)
// Configure the cell...
return cell
}
*/
/*
// Override to support conditional editing of the table view.
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
// Return false if you do not want the specified item to be editable.
return true
}
*/
/*
// Override to support editing the table view.
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
// Delete the row from the data source
tableView.deleteRows(at: [indexPath], with: .fade)
} else if editingStyle == .insert {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
*/
/*
// Override to support rearranging the table view.
override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) {
}
*/
/*
// Override to support conditional rearranging of the table view.
override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
// Return false if you do not want the item to be re-orderable.
return true
}
*/
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
}
*/
}
委任とデータ・ソース
デフォルト設定
UIViewController
プロトコルを直接入力して継承できます.
Outletに接続して使用します.
コードで接続できます.import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
let cellIdentifier: String = "cell"
let korean: [String] = ["가", "나", "다", "라", "마", "바", "사", "아", "자", "차", "카", "타", "파", "하"]
let english: [String] = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
//한글과 영어 두개의 섹션
func numberOfSections(in tableView: UITableView) -> Int {
return 2
}
//섹션에 있는 행의 개수
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch section {
case 0:
return korean.count
case 1:
return english.count
default:
return 0
}
}
//행에 해당하는 셀 리턴
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: self.cellIdentifier, for: indexPath)
// 셀 생성
let text: String = indexPath.section == 0 ? korean[indexPath.row] : english[indexPath.row]
cell.textLabel?.text = text
return cell
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return section == 0 ? "한글" : "영어"
}
}
テープビューコントローラとビューコントローラ
2つの必須UItableViewDataSourceプロトコルを比較
リボンビューコントローラ
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: CityTableViewCell = tableView.dequeueReusableCell(withIdentifier: self.cellIdentifier, for: indexPath) as! CityTableViewCell
cell.cityTextLabel?.text = self.titleToSet
return cell
}
ビューコントローラ
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.countries.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: CountryTableViewCell = tableView.dequeueReusableCell(withIdentifier: self.cellIdentifier, for: indexPath) as! CountryTableViewCell
cell.countryTextLabel?.text = self.countries[indexPath.row].koreanName
cell.countryImageView?.image = UIImage(named: "flag_" + self.countries[indexPath.row].assetName)
return cell
}
はい、table viewコントローラは上書きされており、タグは継承されていません.😂
Cocoa Touch Classとは何かを大まかに感じた瞬間でした!
誤り
import UIKit
class TableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 0
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 0
}
/*
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)
// Configure the cell...
return cell
}
*/
/*
// Override to support conditional editing of the table view.
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
// Return false if you do not want the specified item to be editable.
return true
}
*/
/*
// Override to support editing the table view.
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
// Delete the row from the data source
tableView.deleteRows(at: [indexPath], with: .fade)
} else if editingStyle == .insert {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
*/
/*
// Override to support rearranging the table view.
override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) {
}
*/
/*
// Override to support conditional rearranging of the table view.
override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
// Return false if you do not want the item to be re-orderable.
return true
}
*/
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
}
*/
}
プロトコルを直接入力して継承できます.
Outletに接続して使用します.
コードで接続できます.
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
let cellIdentifier: String = "cell"
let korean: [String] = ["가", "나", "다", "라", "마", "바", "사", "아", "자", "차", "카", "타", "파", "하"]
let english: [String] = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
//한글과 영어 두개의 섹션
func numberOfSections(in tableView: UITableView) -> Int {
return 2
}
//섹션에 있는 행의 개수
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch section {
case 0:
return korean.count
case 1:
return english.count
default:
return 0
}
}
//행에 해당하는 셀 리턴
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: self.cellIdentifier, for: indexPath)
// 셀 생성
let text: String = indexPath.section == 0 ? korean[indexPath.row] : english[indexPath.row]
cell.textLabel?.text = text
return cell
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return section == 0 ? "한글" : "영어"
}
}
テープビューコントローラとビューコントローラ
2つの必須UItableViewDataSourceプロトコルを比較
リボンビューコントローラ
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: CityTableViewCell = tableView.dequeueReusableCell(withIdentifier: self.cellIdentifier, for: indexPath) as! CityTableViewCell
cell.cityTextLabel?.text = self.titleToSet
return cell
}
ビューコントローラ
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.countries.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: CountryTableViewCell = tableView.dequeueReusableCell(withIdentifier: self.cellIdentifier, for: indexPath) as! CountryTableViewCell
cell.countryTextLabel?.text = self.countries[indexPath.row].koreanName
cell.countryImageView?.image = UIImage(named: "flag_" + self.countries[indexPath.row].assetName)
return cell
}
はい、table viewコントローラは上書きされており、タグは継承されていません.😂
Cocoa Touch Classとは何かを大まかに感じた瞬間でした!
誤り
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: CityTableViewCell = tableView.dequeueReusableCell(withIdentifier: self.cellIdentifier, for: indexPath) as! CityTableViewCell
cell.cityTextLabel?.text = self.titleToSet
return cell
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.countries.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: CountryTableViewCell = tableView.dequeueReusableCell(withIdentifier: self.cellIdentifier, for: indexPath) as! CountryTableViewCell
cell.countryTextLabel?.text = self.countries[indexPath.row].koreanName
cell.countryImageView?.image = UIImage(named: "flag_" + self.countries[indexPath.row].assetName)
return cell
}
Reference
この問題について(テープビュー/ココアタッチクラスvsビューコントローラ), 我々は、より多くの情報をここで見つけました https://velog.io/@msi753/TableViewControllerテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol