UITTableView의 경계 문자에서 하위 뷰를 호출하고 데이터 전송
14926 단어 Swift
요지
컨텐트
UItableView를 터치한 후 다음 뷰의 샘플로 메시지를 보냅니다.
이쪽 트윗을 보고 썼어요.
가까스로 일부로 나뉘어진 UItable View를 만들었지만 선택한 항목에 따라 다음 페이지로 옮기는 과정에서 View 분기(선택한 값을 교부하는 것)가 잘못되어 가까워졌다.누가, 누가, #Swiftpic.twitter.com/y979LBMdVi-피(@imachan0322)2014년 12월 30일
아마 이런 물건일 것이다.
틀려도 그동안 푹 빠져서 재수가 없었기 때문에 비망록도 겸해서 쓴다.한 번 더 하고 싶다면, 시형까지 많이 할 수 있다.
GiitHub에 올려주세요. .
※ 요즘 취미는 트위터를'스위프트'로 검색한 뒤 머뭇거리는 것입니다.
자세한 말
스토리보드를 떼어놓으면 편해요.
데이터를 전달하는 방법은 여러 가지가 있지만표 보기에서 다음 보기를 호출하면'전용 컨트롤러 & 전용 스토리보드'를 준비하는 것이 비교적 이해하기 쉽고 수월하다고 생각합니다(이번에는 괜찮습니다. 단원 전용 xib를 만드는 것도 수월합니다. 저는 프로그램 제작 UI를 잘 쓰지 못합니다.)
우선 하위 보기 컨트롤러를 준비하고 데이터 전송을 위해 변수를 준비합니다.class SubViewController: UIViewController {
var targetText: String!
@IBOutlet weak var label: UILabel! {
didSet {
label.text = targetText
}
}
}
그나저나 디드셋의 부분은 이걸 보고 폭발 속도로 산채를 만들었어요.
IBOutlet에 대한 didSet이요!"Objective-C로 아직도 소모 중인가? - horimislime blog" - 수기라니(@sugitani)http://t.co/iPHAYDRulk
이거 참 편리하다.view Did Load를 점거한 사람들을 거의 쫓아낼 수 있다.
스토리보드 설정이 특별히 어렵지는 않지만,'is Initial View Controller'는 잊기 쉬운 게 사실이어서 주의가 필요하다.이거 잊어버리면 고생이야.
그리고 전용 컨트롤러를 전용 스토리보드에 설치하면 델리먼에 호출자 처리를 설치할 수 있다.extension ViewController {
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
// 渡すデータ
let text = "\(contents[indexPath.section].title) \(contents[indexPath.section].items[indexPath.row])"
// 次のビューコントローラーを用意
let sb = UIStoryboard(name: "Sub", bundle: NSBundle.mainBundle())
let vc = sb.instantiateInitialViewController() as SubViewController
vc.targetText = text
// プッシュ:この時点でIBOutletが用意され、didSetも働く
navigationController?.pushViewController(vc, animated: true)
}
}
책상 안의 물건을 반에 놓으면 매우 수월할 것이다
나는'UItableView의 정확한 사용 방법'이 존재하는지 모르겠다. 아마도 사람마다 다를 것이다. 최근에 우리 집에서는'실제로 데이터 원본 기능이 있는 반'을 만드는 것이 유행이다.
송이경(신지현): 왠지 제일 평온한...근거 없는 기분인 것 같아.
샘플에 포함된 TableContent 클래스 인스턴스는 영역 단위로 정보를 유지합니다.구체적으로 영역 제목과 영역 내의 문자 그룹을 포함합니다.물론 더 많은 정보를 제공할 수도 있지만 이럴 때도 var items: [HogeClass]!
로 고쳐 쓸 수 있다.거기가 더 편할 것 같아서요.
TableContent 클래스에는 속성 목록에서 정보를 가져오는 클래스 함수와 셀을 만들고 반환하는 방법이 있습니다.class TableContent {
var title: String!
var items: [String]!
class func readPropertyList() -> [TableContent] {
var contents = [TableContent]()
let filePath = NSBundle.mainBundle().pathForResource("tableContents", ofType: "plist")!
let rawDic = NSDictionary(contentsOfFile: filePath) as [String: [String]]
for title in rawDic["title"]! {
let c = TableContent()
c.title = title
c.items = rawDic[title]
contents.append(c)
}
return contents
}
func makeTableCell(tableview: UITableView, _ indexPath: NSIndexPath) -> UITableViewCell {
let cellID = "tableViewCell"
let cell = tableview.dequeueReusableCellWithIdentifier(cellID) as? UITableViewCell ?? UITableViewCell()
cell.textLabel?.text = items[indexPath.row]
return cell
}
}
.plist를 사용했기 때문에 로컬화도 가능합니다.
여기까지 쓰면 표 보기의 설치가 상당히 간단하다.
먼저 didLoad 단계에서 속성 목록을 미리 읽습니다.class ViewController: UITableViewController {
// テーブルのコンテンツ
var contents: [TableContent]!
override func viewDidLoad() {
super.viewDidLoad()
// コンテンツの取得
contents = TableContent.readPropertyList()
}
}
데이터 원본을 설정해야 하지만, 이것은 기계적으로 쓰는 것일 뿐이다.
보기 컨트롤러에 최대한 디테일하게 쓰고 싶지 않지만 데이터 원본이 반을 나눌 정도가 아니기 때문에 이런 구조를 만들어 봤습니다.extension ViewController {
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return contents.count
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return contents[section].items.count
}
override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return contents[section].title
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
return contents[indexPath.section].makeTableCell(tableView, indexPath)
}
}
더군다나 이 방법이 가장 좋은 것이지 다른 것은 안 된다는 뜻이 아니다.
연장으로 ViewController를 가늘게 썰면 편해요.
이번처럼 짧은 샘플은 읽기 어려웠지만 한 반에서 5, 6개의 델리멘 계승을 할 때 다른 문서로 나누는 것이 비교적 수월하다고 느꼈다.
이것도 몇 가지 방법을 모방했다.
Reference
이 문제에 관하여(UITTableView의 경계 문자에서 하위 뷰를 호출하고 데이터 전송), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tottokotkd/items/3c697978ed8274d5b379
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
class SubViewController: UIViewController {
var targetText: String!
@IBOutlet weak var label: UILabel! {
didSet {
label.text = targetText
}
}
}
extension ViewController {
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
// 渡すデータ
let text = "\(contents[indexPath.section].title) \(contents[indexPath.section].items[indexPath.row])"
// 次のビューコントローラーを用意
let sb = UIStoryboard(name: "Sub", bundle: NSBundle.mainBundle())
let vc = sb.instantiateInitialViewController() as SubViewController
vc.targetText = text
// プッシュ:この時点でIBOutletが用意され、didSetも働く
navigationController?.pushViewController(vc, animated: true)
}
}
class TableContent {
var title: String!
var items: [String]!
class func readPropertyList() -> [TableContent] {
var contents = [TableContent]()
let filePath = NSBundle.mainBundle().pathForResource("tableContents", ofType: "plist")!
let rawDic = NSDictionary(contentsOfFile: filePath) as [String: [String]]
for title in rawDic["title"]! {
let c = TableContent()
c.title = title
c.items = rawDic[title]
contents.append(c)
}
return contents
}
func makeTableCell(tableview: UITableView, _ indexPath: NSIndexPath) -> UITableViewCell {
let cellID = "tableViewCell"
let cell = tableview.dequeueReusableCellWithIdentifier(cellID) as? UITableViewCell ?? UITableViewCell()
cell.textLabel?.text = items[indexPath.row]
return cell
}
}
class ViewController: UITableViewController {
// テーブルのコンテンツ
var contents: [TableContent]!
override func viewDidLoad() {
super.viewDidLoad()
// コンテンツの取得
contents = TableContent.readPropertyList()
}
}
extension ViewController {
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return contents.count
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return contents[section].items.count
}
override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return contents[section].title
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
return contents[indexPath.section].makeTableCell(tableView, indexPath)
}
}
Reference
이 문제에 관하여(UITTableView의 경계 문자에서 하위 뷰를 호출하고 데이터 전송), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tottokotkd/items/3c697978ed8274d5b379텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)