티스토리 뷰
UITableView 가 있으면 , 위로 잡아땡겨서 Cell들에 내용을 추가시켜주고 싶은경우 ,
우선 위로 잡아땡겨서 TableView의 마지막 Cell이 나올 때를 캐치해야한다.
이때, 2가지방법이 있는데 난 tableView delegate함수를 사용하였다.
1. scrollview delegate 함수
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
// 마지막 셀일때 다시 통신 해서 값 받아와야한다.
let height = scrollView.frame.size.height
let contentYoffset = scrollView.contentOffset.y
let distanceFromBottom = scrollView.contentSize.height - contentYoffset
if distanceFromBottom < height {
//업데이트하고싶은 action 구현
}
}
}
2. tableview delegate 함수
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if indexPath.row + 1 == 나타내는 아이템 배열.count {
print("you reached end of the table")
}
}
이 delegate 함수를 선언하면 지금 있는 셀의 갯수 보다 하나 많을 때, 이 함수가 불리게 되는데
print 문 이 들어있는 부분에 원하는 실행 내용을 작성해주면 된다.
그런데 여기서 셀들을 추가시켜주면 원하는대로 실행은 되지만
uitableviews.reloaddata()를 실행하게 되면 , Cell들이 반씩 올라가서 보이기 때문에 유저가 불편한 문제점들이 발생하였다.
이를 해결하기 위해
var heightAtIndexPath = NSMutableDictionary()
를 선언해준다음 viewDidLoad() 함수에는 아래의 내용을 선언해준다.
addressTableView.rowHeight = UITableViewAutomaticDimension
이런식으로 rowHeight 를 AutoDemension으로 설정해준다음
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
if let height = heightAtIndexPath.object(forKey: indexPath) as? NSNumber {
return CGFloat(height.floatValue)
} else {
return UITableViewAutomaticDimension
}
}
이 Delegate 함수를 구현한다.
그리고 위의 willDisplay delegate 함수에
let height = NSNumber(value: Float(cell.frame.size.height))
heightAtIndexPath.setObject(height, forKey: indexPath as NSCopying)
를 추가시켜주면 끝.
'Swift' 카테고리의 다른 글
Navigation Controller 사용시에 두번 POP 하는 방법 (1) | 2018.09.17 |
---|---|
UIRefreshControl : 스크롤 내려서 Reload, Refresh 하기 (Scroll Down) (0) | 2018.08.11 |
UIActivityVIewController - 공유하기버튼 (0) | 2018.08.02 |
UIView, UIButton 에 곡선 그려주기 (0) | 2018.07.23 |
iOS Status Bar Background Color Change (0) | 2018.07.23 |
- Total
- Today
- Yesterday