iOS6에서 UITableViewCell 위에 올라간 UILabel, UIButton 등의 객체를 참조할 때의 코드가 iOS7에서 조금 변경되었다.
- iOS6
UITableViewCell
↳ UITableViewCellContentView
↳ UILabel ...
- iOS7
UITableViewCell
↳ UITableViewCellScrollView <- 추가됨.
↳ UILabel...
↳ UITableViewCellContentView
↳ UILabel ...
그래서 iOS6에서 Cell 아래에 있는 Label등에 접근할 때, 또는 Cell 위에 아래와 같이 버튼을 올렸을 경우
UIButton *button3 = [UIButton buttonWithType:UIButtonTypeCustom]; [button3 setFrame:CGRectMake(14, 5, 100, 113)]; [button3 addTarget:self action:@selector(cellButtonAction:) forControlEvents:UIControlEventTouchUpInside]; [cell.contentView addSubview:button3]; |
- iOS6까지는 아래와 같이 접근이 가능했음.
UITableViewCell *cell = (UITableViewCell *)[[(UIView *) sender superview] superview]; UITableView *tableView = (UITableView *)[cell superview]; NSIndexPath *cellIndexPath = [tableView indexPathForCell:cell]; NSUInteger row = [cellIndexPath row]; |
- iOS7 에서는 Cell과 ContentView 사이에 UITableViewCellScrollView 가 추가되고,
UITableView와 Cell 사이에 UITableViewWrapperView가 추가되었다. 그래서 접근하기 위해서는 superview가 더 필요하다.
UITableViewCell *cell = (UITableViewCell *)[[[(UIView *) sender superview] superview] superview]; UITableView *tableView = (UITableView *)[[cell superview] superview]; NSIndexPath *cellIndexPath = [tableView indexPathForCell:cell]; NSUInteger row = [cellIndexPath row]; |
* UITableViewCellScrollView?
- UITableViewCell에 추가된 Private Class.
- iOS7에서 Cell을 삭제할 때 왼쪽으로 스크롤해야하는데, 이 때 사용되는 것으로 보임.
* UITableViewWrapperView?
- Private Class 같은데, 용도를 아직 모르겠음.
--------------------------
추가사항.
위에서 예로 든 경우 superview를 이용해서 접근하고 있는데, 아래와 같은 방법으로 이용하는게 좀 더 안전한 방법임을 다른 분이 알려줌.
- (void)btnPressed:(id)sender
{
CGPoint btnPos = [sender convertPoint:CGPointZero toView:tableView];
NSIndexPath *ip = [tableView indexPathForRowAtPoint:btnPos];
if (ip != nil) {
...
}
}
'기술 > iOS' 카테고리의 다른 글
XCode에서 파일 생성 시 기본으로 만들어지는 주석 바꾸기. (0) | 2013.12.05 |
---|---|
application:didReceiveRemoteNotification에서 Noti 받을 때 앱 상태별 처리. (0) | 2013.11.18 |
XCode 단축키. (0) | 2013.09.26 |
XCode에서 Syntax Color가 적용이 해제 되었을 때. (0) | 2013.09.25 |
iPhone URL Schemes (0) | 2013.04.29 |