디자인 시안 중 접기/펼치기가 가능한 UI가 있어 section부분이 터치가 가능해야 했다.
일단 기본적으론 지원하지 않기 때문에 오픈소스 찾아보려 했지만
코드보기가 몹시 귀찮은 관계로 쉬운 방법을 찾다보니...
view를 만들어 section을 대체할 수 있어 그 방법으로 도전
간단하게 UITableViewCell을 끌어와서 label하나와 버튼 하나를 배치
Id를 SectionCell이라 명명
이 부분은 마음가는대로 해도 될듯
이제 storyboard에서 만든 section을 사용하려면 UITableViewDelegate함수인 tableView:viewForHeaderInSection:함수에 아래와 같이 기술하면 된다.
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
static NSString *HeaderCellIdentifier = @"SectionCell"; // cell id
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:HeaderCellIdentifier]; // cell id를 가진 cell을 재사용
if (cell == nil) { // cell이 nil일 경우 초기화
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:HeaderCellIdentifier];
}
return cell; // cell 반환
}
만약 cell안의 뷰들을 가져오고 싶은경우 storyboard에서 해당 control에 tag를 붙인후 아래와 같이 태그로 받아올 수 있다.
UILabel* sectionLabel = [cell viewWithTag:1005];
버튼은 ViewController와 연결한 후 (Assistant Editor를 킨채 button을 control누른채로 클릭하여 코드 쪽으로 옮기면 함수가 만들어진다.) 함수에 아래와 같이 기술한다.
- (IBAction)folderButtonClicked:(UIButton*)button
{
self.isClosed = !self.isClosed; // 현재 닫혀있는지 상태변수를 변경(BOOL변수)
[self.tableView reloadData]; // 테이블 뷰를 다시 로드
}
그러면 버튼을 클릭 시 현재 상태가 닫혀있음/닫혀있지 않음 2가지 상태가 존재한다.
이 때 UITableViewDelegate함수인 tableView:numberOfRowsInSection: 함수에서 row수를 조절해주면 접기/펼치기가 가능한 테이블 뷰를 만들 수 있다.
코드는 아래와 같다.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
{
if (self.isClosed)
{
return 0; // 닫혀 있는 상태니깐 0개
}
else
{
return self.dataArray.count; // 열려 있는 상태니깐 데이터의 갯수만큼 리턴
}
}
'프로그래밍 > iOS' 카테고리의 다른 글
[iOS] topViewController 가져오기 (0) | 2017.06.23 |
---|---|
[iOS] 단말 정보 가져오기 (0) | 2017.04.18 |
[iOS] XCode8.3 에러내용 확인하기 (0) | 2017.04.05 |
[iOS] UITableView cell가져오기 (0) | 2017.04.04 |
[iOS] UIButton touch 영역 늘리기 (3) | 2017.04.04 |