[Swift] TableView를 사용하여 간단한 앱 만들기
삽화 신청
일부 작품과 아티스트 이름을 표시하는 iOS 애플리케이션을 만들어 보겠습니다. 내용 목록을 표시하려면 TableView를 사용할 수 있습니다.
삽화보기 컨트롤러
먼저 기본 ViewController.swift를 삭제하고 ArtworksViewController라는 새 ViewController를 만듭니다. 이것은 앱의 메인 페이지가 될 것입니다.
Main.storyboard를 열고 테이블 보기를 추가하십시오. 그런 다음 테이블 보기 내부에 테이블 보기 셀을 추가하십시오. 셀에는 그림의 이미지, 제목 및 아티스트 이름이 포함되므로 테이블 보기 셀에 ImageView와 두 개의 레이블을 추가합니다.
// ArtworksViewController.swift
import UIKit
class ArtworksViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
struct Painting {
let title: String
let artist: String
}
let paintingArray = [
Painting(title: "Dance", artist: "Henri Matisse"),
Painting(title: "Impression, Sunrise", artist: "Claude Monet"),
Painting(title: "Over the Town", artist: "Marc Chagall"),
Painting(title: "Portrait of Adele Bloch-Bauer", artist: "Gustav Klimt"),
Painting(title: "Starry Night", artist: "Vincent van Gogh"),
Painting(title: "The Garden of Earthly Delights", artist: "Hieronymus Bosch"),
Painting(title: "The Lovers II", artist: "René Magritte"),
Painting(title: "청심대", artist: "김홍도"),
Painting(title: "황소", artist: "이중섭"),
]
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDetail" {
let vc = segue.destination as? DetailViewController
if let index = sender as? Int {
vc?.art_title = paintingArray[index].title
vc?.artist = paintingArray[index].artist
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return paintingArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? ListCell else {
return UITableViewCell()
}
let img = UIImage(named: "\(paintingArray[indexPath.row].title).jpg")
cell.imgView.image = img
cell.titleLabel.text = paintingArray[indexPath.row].title
cell.artistLabel.text = paintingArray[indexPath.row].artist
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "showDetail", sender: indexPath.row)
}
}
class ListCell: UITableViewCell {
@IBOutlet weak var imgView: UIImageView!
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var artistLabel: UILabel!
}
// ArtworksViewController.swift
import UIKit
class ArtworksViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
struct Painting {
let title: String
let artist: String
}
let paintingArray = [
Painting(title: "Dance", artist: "Henri Matisse"),
Painting(title: "Impression, Sunrise", artist: "Claude Monet"),
Painting(title: "Over the Town", artist: "Marc Chagall"),
Painting(title: "Portrait of Adele Bloch-Bauer", artist: "Gustav Klimt"),
Painting(title: "Starry Night", artist: "Vincent van Gogh"),
Painting(title: "The Garden of Earthly Delights", artist: "Hieronymus Bosch"),
Painting(title: "The Lovers II", artist: "René Magritte"),
Painting(title: "청심대", artist: "김홍도"),
Painting(title: "황소", artist: "이중섭"),
]
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDetail" {
let vc = segue.destination as? DetailViewController
if let index = sender as? Int {
vc?.art_title = paintingArray[index].title
vc?.artist = paintingArray[index].artist
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return paintingArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? ListCell else {
return UITableViewCell()
}
let img = UIImage(named: "\(paintingArray[indexPath.row].title).jpg")
cell.imgView.image = img
cell.titleLabel.text = paintingArray[indexPath.row].title
cell.artistLabel.text = paintingArray[indexPath.row].artist
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "showDetail", sender: indexPath.row)
}
}
class ListCell: UITableViewCell {
@IBOutlet weak var imgView: UIImageView!
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var artistLabel: UILabel!
}
배열의 총 길이를 반환합니다.
디테일뷰 컨트롤러
모달을 표시하는 다른 ViewController를 만듭니다.
여기에는 ImageView와 두 개의 레이블이 포함됩니다. 닫기 버튼도 필요합니다.
// DetailViewController.swift
import UIKit
class DetailViewController: UIViewController {
@IBOutlet weak var imgView: UIImageView!
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var artistLabel: UILabel!
var art_title: String?
var artist: String?
override func viewDidLoad() {
super.viewDidLoad()
updateUI()
}
func updateUI() {
if let title = self.art_title, let artist = self.artist {
let img = UIImage(named: "\(title).jpg")
imgView.image = img
titleLabel.text = art_title
artistLabel.text = artist
}
}
@IBAction func close(_ sender: Any) {
dismiss(animated: true, completion: nil)
}
}
두 개의 ViewController 연결
Reference
이 문제에 관하여([Swift] TableView를 사용하여 간단한 앱 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ninahwang/swift-create-a-simple-app-using-tableview-49gg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)