UITTableView의 경계 문자에서 하위 뷰를 호출하고 데이터 전송

14926 단어 Swift

요지

  • 시야 컨트롤러 간의 데이터 교환, 스토리보드를 분리하여 in s t an t iate Initial View Controller를 사용하면 간단합니다
  • .storyboard를 새로 제작한 경우 is Initial View Controller 설정을 잊지 마십시오!
  • 컨텐트


    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개의 델리멘 계승을 할 때 다른 문서로 나누는 것이 비교적 수월하다고 느꼈다.
    이것도 몇 가지 방법을 모방했다.

    좋은 웹페이지 즐겨찾기