2015년 12월 21일 월요일

swift extension 으로 UITableViewDataSource, UITableViewDelegate 함수 작성 하기

Objective - C를 기반으로 앱을 개발 해 왔다.
개발 가닥은 이미 알고 있기 때문에 ViewController에 TableVeiw 를 추가 해서 기능을 구현 하려 하면

UITableViewDataSource, UITableViewDelegate 를 상속 받아서
delegate메서드를 추가 해야 하낟.

swift도 마찬가지라 생각 하고

바로

clase SomeViewConteroller: UIViewController {

}

==>

class SomeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

}

이렇게 상속 받은 다음

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.menuName.count

    }
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell: HomeMenuTableViewCell = self.tableView.dequeueReusableCellWithIdentifier("HomeMenuTableViewCell") as! HomeMenuTableViewCell
        
        cell.menuImage.image = UIImage(named: self.iconName[indexPath.row])
        cell.menuLabel.text = self.menuName[indexPath.row]
        cell.checkOnOffImage.image = UIImage(named: self.checkOnOff[indexPath.row])
        
        return cell
        
    }
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        print("You selected cell #\(indexPath.row)!")
    }
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        let isHighRes = UIDevice.currentDevice().isHighResolution
    
        if isHighRes {
            //return 99
            return 66
        }
        else
        {
            return 66
        }
    }


위와 같은 함수를 작성 해 주면 된다.

swift를 쓰니까
extension을 이용 할 수 있다.

class 선언 부는 그대로 두고

}
클래스 브레이스 끝 하단에
extension SomeViewController: UITableViewDataSource {
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.menuName.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell: HomeMenuTableViewCell = self.tableView.dequeueReusableCellWithIdentifier("HomeMenuTableViewCell") as! HomeMenuTableViewCell
        
        cell.menuImage.image = UIImage(named: self.iconName[indexPath.row])
        cell.menuLabel.text = self.menuName[indexPath.row]
        cell.checkOnOffImage.image = UIImage(named: self.checkOnOff[indexPath.row])
        
        return cell
        
    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        print("You selected cell #\(indexPath.row)!")
    }
}

extension  SomeViewController: UITableViewDelegate {
    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return 66
    }
}

이렇게 extension으로 작성을 해도 된다.


그럼 요런 넘들을 Ctrl + Opt + Cmd + 2 
Show The Code Snipet Library 에 추가 하고

중간 중간  수정 해야 하는 부분에  <#Code#> 로 처리를 하면 아주 좋은 스니핏 라이브러리가 된다.

textFieldDelegate도 마찬가지!



댓글 없음: