UITableSwift에 대한 보기
저는 스위프트와 iOS에서 몇 달째 일하고 있습니다.저는 여러 가지 일을 하는 방법에 익숙하지만, 보지 않고 글만 쓸 수 있을 정도로 실력이 부족합니다.Stack Overflow는 과거에 제가 잘 모르는 주제(예: AsyncTask Android)에 대해 신속한 답변을 제공해 주셔서 감사했습니다.
iOS의UITableView
저는 이 범주에 속합니다.몇 번 해봤지만, 세부 사항이 무엇인지 잊어버립니다.StackOverflow에서 기본적인 예를 묻는 다른 질문을 찾을 수 없었고 온라인의 많은 튜토리얼보다 짧은 것을 찾고 있습니다(이것은 매우 좋지만).
저는 앞으로 제가 참고할 수 있도록 아래 답변을 드립니다.
아래 예제는 We❤Swift의 긴 게시물을 적용하고 단순화한 것입니다.다음과 같이 표시됩니다.
새 프로젝트 만들기
일반적인 단일 보기 응용프로그램일 수 있습니다.
코드 추가
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
행을 누를 때마다 메서드가 호출됩니다.
스토리보드에 테이블 뷰 추가
드래그 aUITableView
View 컨트롤러로 이동합니다.자동 레이아웃을 사용하여 네 면을 고정합니다.
콘센트 연결
Control IB의 테이블 보기에서 다음으로 끌어서 놓기tableView
코드의 아웃렛입니다.
끝났습니다
이상입니다.이제 앱을 실행할 수 있습니다.
이 답변은 Xcode 9 및 Swift 4를 사용하여 테스트되었습니다.
변주곡
행 삭제
사용자가 행을 삭제할 수 있도록 하려면 위의 기본 프로젝트에 메서드를 하나만 추가하면 됩니다.방법에 대한 자세한 내용은 이 기본 예를 참조하십시오.
행 간격
행 사이에 간격을 두려면 이 추가 예제를 참조하십시오.
사용자 지정 셀
표 보기 셀의 기본 레이아웃이 필요하지 않을 수 있습니다.사용자 지정 셀 만들기를 시작하는 데 도움이 되는 예를 확인하십시오.
동적 셀 높이
때때로 여러분은 모든 세포의 높이가 같지 않기를 바랍니다.iOS 8부터는 셀 내용에 따라 자동으로 높이를 설정하기 쉽습니다.시작하는 데 필요한 모든 내용은 이 예를 참조하십시오.
추가 읽기
완전성을 위해, 그리고 인터페이스 빌더를 사용하지 않으려는 사람들을 위해, 크기와 위치는 다르지만 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에서
클래스에 위임된 UITableViewDataSource, UITableViewDelegate를 추가합니다.
테이블 뷰 변수 및 배열을 만듭니다.
뷰에서 DidLoad가 테이블 뷰를 작성했습니다.
딜러에게 테이블 보기 호출
요구 사항에 따라 테이블 보기 대리자 기능을 호출합니다.
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를 만듭니다.
메인 스토리보드
결과
여기 스위프트 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
'programing' 카테고리의 다른 글
R 스크립트 라인 번호를 오류로 가져오는 방법은 무엇입니까? (0) | 2023.09.05 |
---|---|
MySQL Workbench > 플러그인 > 유틸리티 > SQL 쿼리 다시 포맷 (0) | 2023.09.05 |
변경 이벤트에서 jQuery 드롭다운 값을 가져오는 방법 (0) | 2023.09.05 |
DBeaver와 MySQL 간의 연결 (0) | 2023.09.05 |
pm2와 도커를 함께 사용하는 이유는 무엇입니까? (0) | 2023.09.05 |