UIView Controller에서 TableView를 가지고 놀아봤어요.

8948 단어 SwifttableViewiOS
응용 프로그램 설정 등에 TableView를 사용할 때는 각 셀을 설정하고 제어를 탑재해야 한다.Storyboard에서 설정하거나 영역을 여러 개로 설정할 수 있지만 static cell로 설정해야 하므로 TableViewController를 사용해야 합니다.그러나 다른 UIView 부품을 사용하기 위해서는 UIView Controller(예를 들어 ToolBar와ADBannerView 등)를 사용해야 하며, 이 경우 다이나믹 프로타입을 사용하여 코드를 설정해야 한다.
그래서 ViewController에 TableView를 붙이고 거기에 각종 Cell을 설정해 봤습니다.
여기에 Storyboard로 TableView를 붙이고 코드로 칸과 구역을 설정하며 코드로 TableView를 붙이는 것도 OK입니다.요점은 다음과 같다.
1. 영역 제목
TableViewDataSource는 영역 제목을 설정하기 위해 다음과 같은 방법을 제공합니다.
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return titleOfSections[section]
}
이 옵션을 사용하면 영역 제목에 제목을 간단하게 설정할 수 있습니다.그러나 이렇게 설정된 제목은 글꼴 크기 등을 바꿀 수 없다.이번에는 델리멘의 방법으로 준비한 아래의 방법을 사용하자.
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let header = UILabel(frame: CGRectMake(0, 0, 200, 22))
    header.text = titleOfSections[section]
    header.font = UIFont.boldSystemFontOfSize(12)       
    return header
}
이 방법으로 UIlabel로 제목을 준비하고 이 UIlabel로 돌아갑니다.이 meso를 사용하여 UIImage에 답장하면 그림을 표시할 수 있습니다.
상기 예시에서 각 구역의 제목은 배열되어 있고 이 방법에는 구역에 대응하는 제목이 설정되어 있다.
2. 셀 높이
셀에 이미지를 표시할 때 큰 이미지를 표시하려면 셀 높이를 높게 설정합니다.단원격의 높이는 아래의 경계부호 방법을 사용한다.
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return hight
}
그림% 1개의 캡션을 편집했습니다.다른 칸이 기본 상태를 유지하면 -1로 돌아가 기본 상태를 유지합니다.
영역 제목 설정은 높이를 낮추기 때문에 영역 제목에 같은 방법을 제공합니다.그런데 여기 있어요.
func tableView(tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -> CGFloat {
    return 22   // セルの半分の高さ
}
estimate가 도착하는 방법을 사용해 보았습니다.칸에 대해서도 같은 방법을 준비했지만 이번 예처럼 잘 설정하지 못했다.부서 제목에 대해estimated를 통해 순조롭게 진행되었습니다.
3. 셀 이미지 및 셀 텍스트 설정
DagaSource에서 셀 설정을 준비했습니다.
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    return cell
}
사용하다.
TableViewCell 레벨의 단원을 돌려줘야 하는데, TabelViewCell 레벨은textLabel과 이미지 뷰라는 속성이 있습니다.
이 textLabel의 text에서 칸의 텍스트를 설정하고 이미지 뷰의 이미지에서 UIImage 형식의 이미지를 설정하면 그림은 왼쪽 오른쪽에 텍스트를 표시합니다.이때 이미지의 크기는 셀의 높이에 따라 달라지므로 셀의 높이가 클수록 이미지도 커집니다.
이 textLabel과 image View를 사용하면 표준 이미지와 텍스트의 표시는 매우 간단하게 임의로 배열됩니다.그러나 이 예의 3절처럼 여기에 단추를 놓으면 textLabel과 이미지 뷰를 제어할 수 없기 때문에 사용할 수 없습니다.콘텐츠 뷰에 하위 보기를 직접 표시할 때 텍스트와 그림도 하위 보기에 위치하고 놓아야 합니다.
4. 첨부 파일 뷰에서 컨트롤 구성
칸의 오른쪽은accessoryView로 다른 View로 바뀌었습니다. TableViewCell의accessoryType 속성에UItableViewAccessoryType를 설정하면Detail 단추와 표시기를 표시할 수 있습니다.그러나 이것은accessoyView와 같은 독립된 보기이기 때문에 이 보기를 초기화하고 하위 보기를 불러오면 다양한 제어를 할 수 있습니다.
다음 예에서storyboard에서 TableView를 설정하고 Outlet으로 ViewController 클래스에 연결합니다.

수행 결과:

테이블 뷰에서 세 개의 영역을 설정하고 첫 번째 영역에서 셀 높이를 변경하여 이미지를 표시합니다.첨부 파일 보기를 포함하는 디스플레이 방법은 기본값입니다.두 번째 절은 모든 칸을 첨부 파일 보기에 다른 컨트롤로 설정합니다.3절에서도 콘텐츠뷰는 단추를 설정해 보았다.
import UIKit
class ViewController: UIViewController,
UITableViewDelegate, UITableViewDataSource {
//Storyboard Outlet
@IBOutlet weak var testTableView: UITableView!
//상수
//시야각 상수
let baseColor = UIColor(red: 204/255, green: 204/255, blue: 204/255, alpha: 1.0)
// テーブル用定数
let titleOfSections = ["Image Section", "Control Sections", "3'rd Section"]
let numberOfRows = [1, 3, 1]
let textOfRowsInImage = ["Image Cell"]
let textOfRowsInControl = ["Segment Control", "Switch", "Button"]
let textOfRowsInThird = ["Dual Control"]
//변수
override func viewDidLoad() {
    super.viewDidLoad()

    self.view.backgroundColor = baseColor

    // テーブルビュー設定
    testTableView.backgroundColor = baseColor

}

override func viewDidAppear(animated: Bool) {

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
//제어
func onSegment(sender: UISegmentedControl) {
    let segStatus = sender.selectedSegmentIndex
    println("Segment \(segStatus)")
}

func onSwitch(sender: UISwitch) {
    let swStatus = sender.on
}
//TableView Delegate Method
// テーブルビューセルの高さ取得
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    if indexPath.section == 0 {
        let widthOfScreen = UIScreen.mainScreen().bounds.width
        return widthOfScreen / 3
    } else {
        return -1
    }
}



// アクセサリビューボタンタップ時に呼び出される
func tableView(tableView: UITableView, accessoryButtonTappedForRowWithIndexPath indexPath: NSIndexPath) {
    println("Line \(indexPath.row) tapped")
}


// セクションヘッダのビュー取得
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let header = UILabel(frame: CGRectMake(0, 0, 200, 22))
    header.text = titleOfSections[section]
    header.font = UIFont.boldSystemFontOfSize(12)

    return header
}



// セクションヘッダの高さ取得
func tableView(tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -> CGFloat {
    return 22   // セルの半分の高さ
}
//TableView Data Source Method
// テーブルビューセルの設定
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "testCell")
    switch indexPath.section {
    case 0 :
        cell.textLabel?.text = textOfRowsInImage[indexPath.row]
        let testImage = UIImage(named: "DefaultPhoto.png")
        cell.imageView?.image = testImage
        cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator
    case 1 :
        cell.textLabel?.text = textOfRowsInControl[indexPath.row]
        switch indexPath.row {
        case 0 :
            let segment = UISegmentedControl(items: ["Seg1", "Seg2"])
            segment.selectedSegmentIndex = 0
            segment.addTarget(self, action: "onSegment:", forControlEvents: UIControlEvents.ValueChanged)
            cell.accessoryView = UIView(frame: segment.frame)
            cell.accessoryView?.addSubview(segment)

        case 1 :
            let onOffControl = UISwitch()
            onOffControl.on = true
            onOffControl.addTarget(self, action: "onSwitch:", forControlEvents: UIControlEvents.ValueChanged)
            cell.accessoryView = UIView(frame: onOffControl.frame)
            cell.accessoryView?.addSubview(onOffControl)

        case 2 :
            let buttonOnAccessory = UIButton.buttonWithType(UIButtonType.System) as! UIButton
            buttonOnAccessory.setTitle("Button", forState: UIControlState.Normal)
            buttonOnAccessory.addTarget(self, action: "onButton:", forControlEvents: UIControlEvents.TouchUpInside)
            buttonOnAccessory.backgroundColor = UIColor.lightGrayColor()
            buttonOnAccessory.frame = CGRectMake(0, 0, 60, 40)
            buttonOnAccessory.tag = 0
            cell.accessoryView = UIView(frame: buttonOnAccessory.frame)
            cell.accessoryView?.addSubview(buttonOnAccessory)

        default :
            break
        }
    case 2 :
        let buttonOnContent = UIButton.buttonWithType(UIButtonType.InfoLight) as! UIButton
        buttonOnContent.addTarget(self, action: "onButton:", forControlEvents: UIControlEvents.TouchUpInside)
        buttonOnContent.tag = 0
        buttonOnContent.frame = CGRectMake(0, 0, 40, 40)
        cell.contentView.addSubview(buttonOnContent)
        let label = UILabel(frame: CGRectMake(40, 0, 100, 40))
        label.text = textOfRowsInThird[indexPath.row]
        cell.contentView.addSubview(label)

        let buttonAcc2 = UIButton.buttonWithType(UIButtonType.System) as! UIButton
        buttonAcc2.setTitle("Button", forState: UIControlState.Normal)
        buttonAcc2.addTarget(self, action: "onButton:", forControlEvents: UIControlEvents.TouchUpInside)
        buttonAcc2.backgroundColor = UIColor.lightGrayColor()
        buttonAcc2.frame = CGRectMake(0, 0, 60, 40)
        buttonAcc2.tag = 1
        cell.accessoryView = UIView(frame: buttonAcc2.frame)
        cell.accessoryView?.addSubview(buttonAcc2)
    default :
        break
    }
    return cell
}

// セクション数の設定
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return titleOfSections.count

}

// セクション内の行数
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return numberOfRows[section]

}
}

좋은 웹페이지 즐겨찾기