셀이있는 테이블이 있습니다. 각 셀에는 전화 번호 레이블이 있습니다. 라벨을 탭하면 UIMenuController
이 나타납니다.레이블로 셀의 인덱스 경로를 찾으십시오.
선택한 레이블을 포함하는 셀의 indexPath를 찾는 주요 방법은 무엇입니까? (didSelectRowAtIndexPath:
을 호출하면 안됨)
많은 더러운 해킹을 상상할 수 있지만, 주된/좋은 해결책을 찾고 있습니다.
UPD는
내가 선택한 라벨을 참조있다.
셀이있는 테이블이 있습니다. 각 셀에는 전화 번호 레이블이 있습니다. 라벨을 탭하면 UIMenuController
이 나타납니다.레이블로 셀의 인덱스 경로를 찾으십시오.
선택한 레이블을 포함하는 셀의 indexPath를 찾는 주요 방법은 무엇입니까? (didSelectRowAtIndexPath:
을 호출하면 안됨)
많은 더러운 해킹을 상상할 수 있지만, 주된/좋은 해결책을 찾고 있습니다.
UPD는
내가 선택한 라벨을 참조있다.
편집 :
이것은 더 나은 방법입니다.
- (IBAction)someMethod:(id)sender {
CGPoint hitPoint = [sender convertPoint:CGPointZero toView:self.tableView];
NSIndexPath *hitIndex = [self.tableView indexPathForRowAtPoint:hitPoint];
}
아주 쉽습니다! 말해줘, 왜 슈퍼 뷰가 두 번 전화 했어? –
contentView가 iOS 7에 존재합니다. tableViewCells –
발신자가 포함되어 있고 완료된 IBAction 메소드에서 편집 된 답변을 수행하십시오. 훨씬 더 청결한. –
당신은 갈 수 :
NSMutableArray *cells = [[NSMutableArray alloc] init];
for (NSInteger j = 0; j < [tableView numberOfSections]; ++j)
{
for (NSInteger i = 0; i < [tableView numberOfRowsInSection:j]; ++i)
{
[cells addObject:[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:j]]];
}
}
for (UITableViewCell *cell in cells){
for (UILabel *label in cell.subviews){
if (label == yourLabel)
indexPath = [tableView indexPathForCell: cell];
}
}
나는이 알고리즘을 안다. 그러나 나는 테이블 전체를 스캔해야하고, 나를 놀라게한다. (O (n) 때문에). –
UITableView 메서드 indexPathsForVisibleRows를 사용하여 O (n) 문제를 피할 수 있으며 그 목록을 확인하지만 DCGoD의 대답에 설명 된대로 UITableView 메서드 indexPathForRowAtPoint :를 사용하면 훨씬 간단하고 간단합니다. –
를 레이블에서 레이블의 계층 구조에서 셀 객체를 검색 : 당신이 셀이 있으면
-(UITableViewCell*) cellContainingView:(UIView*)view
{
UIView* currentView = view;
while (currentView)
{
if ([currentView isKindOfClass:[UITableViewCell class]])
{
return (UITableViewCell*)currentView;
}
currentView = currentView.superview;
}
return nil;
}
이 [tableView indexPathForCell:cell]
사용 전화 view.superview.superview를 하드 코딩하는 대신이 메소드를 사용하면 시스템의 버전을 통해 셀의 뷰 계층 구조에서 발생할 수있는 변경 사항을 처리 할 수 있으므로 코드가 더 강력 해집니다.
DCGoD의 대답에 설명 된대로 UITableView 메소드'indexPathForRowAtPoint :'를 사용하면 훨씬 더 간단하고 간단합니다. –
안녕하세요, 왜 didSelectRowAtIndexPath를 호출하면 안됩니까? – james075
주먹으로, 나는이 메서드에서 두 번째로 레이블을 터치 할 때 행을 선택하지 않을 것입니다. 매개 변수로 제공된 indexPath 만 저장할 수 있습니다. @ James03 –