【Swift5】커스텀 셀내의 Switch의 ON/OFF를 셀마다 인식한다
소개
최근, TableView상의 Switch를 눌렀을 때 그 안의 설정을 유효하게 하는, 같은 잘 보이는 것을 만들려고 했습니다만, 조사해도 좀처럼 제대로 움직이는 코드를 만날 수 없었습니다. 그래서 이번에는 우선 목적을 달성할 수 있을 정도로 움직인 코드에 대해 정리해 보겠습니다.
환경
이번에 구현할 내용
print 문으로 콘솔에 다음과 같이 출력
→ (셀 번호) 번째 셀이 선택되었다
→(on/off)
→ (셀의 레이블 텍스트)가 (true 또는 false)
동영상이라면 다음과 같습니다.
맞춤 셀 준비
먼저 맞춤 셀을 만듭니다.
오른쪽 클릭 → New File...
코코아 터치 클래스 선택
파일 이름은 자유롭습니다. 이번에는 「TableViewCell」로 합니다. Also create XIB 파일을 체크하는 것을 잊지 마세요.
지금까지 가능하면 기본 위치에 저장합시다. 다음에 방금 전의 TableViewCell.swift에 코드를 써 갑니다.
TableViewCell.swiftimport UIKit
class TableViewCell: UITableViewCell {
@IBOutlet weak var label: UILabel!
@IBOutlet weak var uiSwitch: UISwitch!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
// スイッチを最初全てoffにしておく
uiSwitch.isOn = false
}
// スイッチが押された時に呼ばれる
@IBAction func changeSwitch(_ sender: UISwitch) {
if sender.isOn {
print("on")
} else {
print("off")
}
}
}
다음으로 xib 파일도 편집합니다. 이번에는 이런 느낌으로. 연관도 잊지 않고.
ViewController로 TableView 설정하기
ViewController.swiftimport UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet var table: UITableView!
var cellContents: Array = ["1つ目","2つ目","3つ目","4つ目","5つ目"]
override func viewDidLoad() {
super.viewDidLoad()
// dataSourceメソッドとdelegateメソッドはこのファイルに書くと宣言
table.dataSource = self
table.delegate = self
// 余分なセルを描画しないようにする
table.tableFooterView = UIView()
// 使うxibファイルを指定
table.register(UINib(nibName: "TableViewCell", bundle: nil), forCellReuseIdentifier: "TableViewCell")
}
// セルの個数を配列の個数に設定
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return cellContents.count
}
// セルの設定
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell") as! TableViewCell
// セルのラベルに配列の中身を順番に表示
cell.label.text = cellContents[indexPath.row]
// スイッチのタグにindexPath.rowの値を入れる
cell.uiSwitch.tag = indexPath.row
// スイッチが押されたときの動作
cell.uiSwitch.addTarget(self, action: #selector(changeSwitch(_:)), for: UIControl.Event.valueChanged)
return cell
}
// セルが押された時に呼ばれるメソッド
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("\(indexPath.row)番目のセルが選ばれた")
}
// セルの幅を80に設定
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 80
}
@objc func changeSwitch(_ sender: UISwitch) {
/*
sender.tagにはスイッチのセルの位置が入る(Int)
sender.isOnにはスイッチのon/off情報が入る(Bool)
下のprint文はセル内のラベルの内容とスイッチのTrue/False
*/
print(cellContents[sender.tag] + "が\(sender.isOn)になった")
}
}
다음으로 스토리 보드도 편집합니다. 이쪽도 관련도 잊지 않고.
요약
응용하면 대체로는 할 수 있을 것 같은 느낌이 듭니다.
정확히 같은 내용의 프로젝트는 여기
참고 사이트
셀에서 스위치를 전환 할 때 셀의 텍스트를 출력하고 싶습니다.
Reference
이 문제에 관하여(【Swift5】커스텀 셀내의 Switch의 ON/OFF를 셀마다 인식한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/leo_rabbit30/items/1637e20fc62841ff68db
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import UIKit
class TableViewCell: UITableViewCell {
@IBOutlet weak var label: UILabel!
@IBOutlet weak var uiSwitch: UISwitch!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
// スイッチを最初全てoffにしておく
uiSwitch.isOn = false
}
// スイッチが押された時に呼ばれる
@IBAction func changeSwitch(_ sender: UISwitch) {
if sender.isOn {
print("on")
} else {
print("off")
}
}
}
ViewController.swift
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet var table: UITableView!
var cellContents: Array = ["1つ目","2つ目","3つ目","4つ目","5つ目"]
override func viewDidLoad() {
super.viewDidLoad()
// dataSourceメソッドとdelegateメソッドはこのファイルに書くと宣言
table.dataSource = self
table.delegate = self
// 余分なセルを描画しないようにする
table.tableFooterView = UIView()
// 使うxibファイルを指定
table.register(UINib(nibName: "TableViewCell", bundle: nil), forCellReuseIdentifier: "TableViewCell")
}
// セルの個数を配列の個数に設定
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return cellContents.count
}
// セルの設定
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell") as! TableViewCell
// セルのラベルに配列の中身を順番に表示
cell.label.text = cellContents[indexPath.row]
// スイッチのタグにindexPath.rowの値を入れる
cell.uiSwitch.tag = indexPath.row
// スイッチが押されたときの動作
cell.uiSwitch.addTarget(self, action: #selector(changeSwitch(_:)), for: UIControl.Event.valueChanged)
return cell
}
// セルが押された時に呼ばれるメソッド
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("\(indexPath.row)番目のセルが選ばれた")
}
// セルの幅を80に設定
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 80
}
@objc func changeSwitch(_ sender: UISwitch) {
/*
sender.tagにはスイッチのセルの位置が入る(Int)
sender.isOnにはスイッチのon/off情報が入る(Bool)
下のprint文はセル内のラベルの内容とスイッチのTrue/False
*/
print(cellContents[sender.tag] + "が\(sender.isOn)になった")
}
}
다음으로 스토리 보드도 편집합니다. 이쪽도 관련도 잊지 않고.
요약
응용하면 대체로는 할 수 있을 것 같은 느낌이 듭니다.
정확히 같은 내용의 프로젝트는 여기
참고 사이트
셀에서 스위치를 전환 할 때 셀의 텍스트를 출력하고 싶습니다.
Reference
이 문제에 관하여(【Swift5】커스텀 셀내의 Switch의 ON/OFF를 셀마다 인식한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/leo_rabbit30/items/1637e20fc62841ff68db
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
셀에서 스위치를 전환 할 때 셀의 텍스트를 출력하고 싶습니다.
Reference
이 문제에 관하여(【Swift5】커스텀 셀내의 Switch의 ON/OFF를 셀마다 인식한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/leo_rabbit30/items/1637e20fc62841ff68db텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)