UITableView Practice - 2

박인준·2019년 12월 17일
0

Swift

목록 보기
19/21

/***************************************************
 UIRefreshControl을 이용해 목록을 갱신할 때마다 임의의 숫자들이 출력되도록 할 것
 랜덤 숫자의 범위는 출력할 숫자 개수의 +50 이며, 모든 숫자는 겹치지 않아야 함.
 e.g.
 20개 출력 시, 랜덤 숫자의 범위는 0 ~ 70
 40개 출력 시, 랜덤 숫자의 범위는 0 ~ 90
 
 < 참고 >
 (0...10).randomElement()  -  0부터 10사이에 임의의 숫자를 뽑아줌
 ***************************************************/
import UIKit

final class TableViewRefresh: UIViewController {
    var range = Array(0...70)
    var data:[Int] = []
    var setData:Set<Int> = []
    
    override var description: String {
        return "Practice 3 - Refresh"
    }
    let tableView = UITableView()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setupTableView()
        //        randomData()
        
    }
    func setupTableView() {
        
        tableView.frame = view.frame
        tableView.dataSource = self
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "CellID")
        
        view.addSubview(tableView)
        
        let refreshControl = UIRefreshControl()
        refreshControl.tintColor = .blue
        refreshControl.addTarget(self, action: #selector(randomData), for: .valueChanged)
        refreshControl.attributedTitle = NSAttributedString(string: "Refreshing...")
        tableView.refreshControl = refreshControl
    }
    
    @objc func randomData() {
        data = []
        setData = []
            for _ in 0...range.count {
                if setData.count < 20 {
                guard let temp = range.randomElement() else {return}
                data.append(temp)
                setData = Set(data)
            }
        }
        tableView.refreshControl?.endRefreshing()
        tableView.reloadData()
    }
}

// MARK: - UITableViewDataSource

extension TableViewRefresh: UITableViewDataSource {
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return setData.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        print(Array(setData))
        let cell = tableView.dequeueReusableCell(withIdentifier: "CellID", for: indexPath)
        cell.textLabel?.text = "\(Array(setData)[indexPath.row])"
        return cell
    }
}

profile
iOS 개발자가 되기 위해

0개의 댓글