テープビュー/ココアタッチクラスvsビューコントローラ


table viewを作るには2つの方法があります
1.ビューコントローラから直接テープビューをアップロードする(Table View)
2.テープビューコントローラを使用する

table viewのインスタンスを作成するときにクラスを指定します.
1.ビューコントローラのみをインスタンスクラスとして指定できます.
2.tableviewコントロールを使用する場合は、tableviewコントロールのインスタンスクラスを指定するにはcoa touchクラスを使用する必要があります.

UIViewControllerとUITableViewControllerの2つの方法でTableビューを作成することを決定します.

その前に。


UItableViewCellアクセサリ

  • Disclosure Indicator
  • Detail Disclosure
  • Checkmark
  • Detail
  • UItableViewCellスタイル

  • Basic
  • Right Detail
  • Left Detail
  • Subtitle
  • 以外のすべてのセル形状はカスタムスタイルで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とは何かを大まかに感じた瞬間でした!
    誤り
  • tableviewcellからセルを持ってきて...それ以外に、他の場所のラベルにデータを入れようとしたときにエラーが発生しました.
  • ViewControllerDelegateを継承し、Table Viewを表示します.依頼=selfの後...3番目の画面に移動...どうして?