programing

UITableSwift에 대한 보기

padding 2023. 9. 5. 19:45
반응형

UITableSwift에 대한 보기

저는 스위프트와 iOS에서 몇 달째 일하고 있습니다.저는 여러 가지 일을 하는 방법에 익숙하지만, 보지 않고 글만 쓸 수 있을 정도로 실력이 부족합니다.Stack Overflow는 과거에 제가 잘 모르는 주제(예: AsyncTask Android)에 대해 신속한 답변을 제공해 주셔서 감사했습니다.

iOS의UITableView저는 이 범주에 속합니다.몇 번 해봤지만, 세부 사항이 무엇인지 잊어버립니다.StackOverflow에서 기본적인 예를 묻는 다른 질문을 찾을 수 없었고 온라인의 많은 튜토리얼보다 짧은 것을 찾고 있습니다(이것은 매우 좋지만).

저는 앞으로 제가 참고할 수 있도록 아래 답변을 드립니다.

아래 예제는 We❤Swift의 긴 게시물을 적용하고 단순화한 것입니다.다음과 같이 표시됩니다.

enter image description here

새 프로젝트 만들기

일반적인 단일 보기 응용프로그램일 수 있습니다.

코드 추가

ViewController.swift 코드를 다음으로 바꿉니다.

import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    
    // Data model: These strings will be the data for the table view cells
    let animals: [String] = ["Horse", "Cow", "Camel", "Sheep", "Goat"]
    
    // cell reuse id (cells that scroll out of view can be reused)
    let cellReuseIdentifier = "cell"
    
    // don't forget to hook this up from the storyboard
    @IBOutlet var tableView: UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Register the table view cell class and its reuse id
        self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier)
        
        // (optional) include this line if you want to remove the extra empty cell divider lines
        // self.tableView.tableFooterView = UIView()

        // This view controller itself will provide the delegate methods and row data for the table view.
        tableView.delegate = self
        tableView.dataSource = self
    }
    
    // number of rows in table view
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.animals.count
    }
    
    // create a cell for each table view row
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        // create a new cell if needed or reuse an old one
        let cell:UITableViewCell = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as UITableViewCell!
        
        // set the text from the data model
        cell.textLabel?.text = self.animals[indexPath.row]
        
        return cell
    }
    
    // method to run when table view cell is tapped
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("You tapped cell number \(indexPath.row).")
    }
}

코드 내 설명을 읽고 무슨 일이 일어나고 있는지 확인합니다.하이라이트는.

  • 뷰 컨트롤러는 다음을 채택합니다.UITableViewDelegate그리고.UITableViewDataSource의정서
  • numberOfRowsInSection메소드는 테이블 뷰에 있는 행 수를 결정합니다.
  • cellForRowAtIndexPath메서드는 각 행을 설정합니다.
  • didSelectRowAtIndexPath행을 누를 때마다 메서드가 호출됩니다.

스토리보드에 테이블 뷰 추가

드래그 aUITableViewView 컨트롤러로 이동합니다.자동 레이아웃을 사용하여 네 면을 고정합니다.

enter image description here

콘센트 연결

Control IB의 테이블 보기에서 다음으로 끌어서 놓기tableView코드의 아웃렛입니다.

끝났습니다

이상입니다.이제 앱을 실행할 수 있습니다.

이 답변은 Xcode 9 및 Swift 4를 사용하여 테스트되었습니다.


변주곡

행 삭제

사용자가 행을 삭제할 수 있도록 하려면 위의 기본 프로젝트에 메서드를 하나만 추가하면 됩니다.방법에 대한 자세한 내용은 이 기본 예를 참조하십시오.

enter image description here

행 간격

행 사이에 간격을 두려면 이 추가 예제를 참조하십시오.

enter image description here

사용자 지정 셀

표 보기 셀의 기본 레이아웃이 필요하지 않을 수 있습니다.사용자 지정 셀 만들기를 시작하는 데 도움이 되는 예를 확인하십시오.

enter image description here

동적 셀 높이

때때로 여러분은 모든 세포의 높이가 같지 않기를 바랍니다.iOS 8부터는 셀 내용에 따라 자동으로 높이를 설정하기 쉽습니다.시작하는 데 필요한 모든 내용은 예를 참조하십시오.

enter image description here

추가 읽기

완전성을 위해, 그리고 인터페이스 빌더를 사용하지 않으려는 사람들을 위해, 크기와 위치는 다르지만 Suragch의 답변에서 완전히 프로그래밍 방식으로 동일한 표를 만드는 방법이 있습니다.

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource  {

    var tableView: UITableView = UITableView()
    let animals = ["Horse", "Cow", "Camel", "Sheep", "Goat"]
    let cellReuseIdentifier = "cell"

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.frame = CGRectMake(0, 50, 320, 200)
        tableView.delegate = self
        tableView.dataSource = self
        tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier)

        self.view.addSubview(tableView)
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return animals.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier(cellReuseIdentifier) as UITableViewCell!

        cell.textLabel?.text = animals[indexPath.row]

        return cell
    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        print("You tapped cell number \(indexPath.row).")
    }

}

기억해 두세요.import UIKit.

Swift 4.1 및 Xcode 9.4.1에서

  1. 클래스에 위임된 UITableViewDataSource, UITableViewDelegate를 추가합니다.

  2. 테이블 뷰 변수 및 배열을 만듭니다.

  3. 뷰에서 DidLoad가 테이블 뷰를 작성했습니다.

  4. 딜러에게 테이블 보기 호출

  5. 요구 사항에 따라 테이블 보기 대리자 기능을 호출합니다.

import UIKit
// 1
class yourViewController: UIViewController , UITableViewDataSource, UITableViewDelegate { 

// 2
var yourTableView:UITableView = UITableView()
let myArray = ["row 1", "row 2", "row 3", "row 4"]

override func viewDidLoad() {
    super.viewDidLoad()

    // 3
    yourTableView.frame = CGRect(x: 10, y: 10, width: view.frame.width-20, height: view.frame.height-200)
    self.view.addSubview(yourTableView)

    // 4
    yourTableView.dataSource = self
    yourTableView.delegate = self

}

// 5
// MARK - UITableView Delegates
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return myArray.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

var cell : UITableViewCell? = tableView.dequeueReusableCell(withIdentifier: "cell")
    if cell == nil {
        cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell")
    }
    if self. myArray.count > 0 {
        cell?.textLabel!.text = self. myArray[indexPath.row]
    }
    cell?.textLabel?.numberOfLines = 0

    return cell!
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

    return 50.0
}

스토리보드를 사용하는 경우 3단계가 필요하지 않습니다.

그러나 4단계 전에 테이블 보기에 대한 IBOutlet을 작성해야 합니다.

스위프트 5

화면에 tableView만 표시하려면 다음을 구현할 수 있습니다.UITableViewController의 신에게에.ViewController그리고 이렇게 하면 간단한 것을 보여줄 수 있습니다.tableViewController라벨이 붙어 있습니다.

스위프트 파일

class ToDoListViewController: UITableViewController {
    let array = ["GAFDGSG","VSBFFSB","BFBFB"]
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        array.count
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "ToDoItemCell", for: indexPath)
        cell.textLabel?.text = array[indexPath.row]
        return cell
    }
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print(indexPath)
    }
}

그리고 스토리보드에서 다음과 같은 식별자를 언급하여 UITableViewController를 만듭니다.

메인 스토리보드

enter image description here

결과

enter image description here

여기 스위프트 4 버전이 있습니다.

import Foundation
import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
{ 
    var tableView: UITableView = UITableView()
    let animals = ["Horse", "Cow", "Camel", "Sheep", "Goat"]
    let cellReuseIdentifier = "cell"

    override func viewDidLoad()
    {
        super.viewDidLoad()

        tableView.frame = CGRect(x: 0, y: 50, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height)
        tableView.delegate = self
        tableView.dataSource = self
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier)

        self.view.addSubview(tableView)
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return animals.count
    }

    internal func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let cell:UITableViewCell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as UITableViewCell!

        cell.textLabel?.text = animals[indexPath.row]

        return cell
    }

    private func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: IndexPath)
    {
        print("You tapped cell number \(indexPath.row).")
    }

}
//    UITableViewCell set Identify "Cell"
//    UITableView Name is  tableReport

UIViewController,UITableViewDelegate,UITableViewDataSource,UINavigationControllerDelegate, UIImagePickerControllerDelegate {

    @IBOutlet weak var tableReport: UITableView!  

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return 5;
        }

        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = tableReport.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
            cell.textLabel?.text = "Report Name"
            return cell;
        }
}

언급URL : https://stackoverflow.com/questions/33234180/uitableview-example-for-swift

반응형