2012-12-05 3 views
6

저는 ipad 앱을 개발 중입니다. 앱에 UITableview가 있습니다. UITableview는 하나의 레이블과 textview를 하위 뷰로 사용하여 프로그래밍 방식으로 작성됩니다. 테이블 뷰에는 최대 5 개의 행이있을 수 있습니다. 한 번에 2 행이 사용자에게 표시됩니다. 런타임시 textview에 텍스트를 입력해야합니다. & 로컬 sqlite db에 저장하십시오. 코드에서 textViewDidBeginEditing 및 textViewDidEndEditing 대리자를 구현했습니다. textViewDidEndEditing 대리자에서, NSMUtable 배열에 텍스트 (텍스트 뷰에 입력 한)를 추가/바꾸려고합니다. 그 텍스트를 입력 textview의 rowindex가 필요합니다. 그래서 내가 추가 할 수/배열의 해당 행 인덱스를 바꿉니다.UITableview에서 사용자 정의 셀의 행 인덱스 가져 오기

텍스트보기의 행 색인을 가져 오는 방법을 알려주십시오.

답변

20

TextView은 일종의 셀에 포함됩니다. 이 셀을 찾으면 표에 색인을 요청할 수 있습니다. TextView에서보기 계층을 탐색하여 셀을 찾으십시오. 예 :

TextView* textView = // your textView; 
UITableViewCell* cell = (UITableViewCell*)[textView superview]; 
UITableView* table = (UITableView *)[cell superview]; 
NSIndexPath* pathOfTheCell = [table indexPathForCell:cell]; 
NSInteger rowOfTheCell = [pathOfTheCell row]; 
NSLog(@"rowofthecell %d", rowOfTheCell); 
+0

감사를 물어 무엇을 달성 할 수있는 더 우아한 방법입니다. 이것은 일부 시나리오에서 작동하며 다른 시나리오에서는 부적절한 행 인덱스를 제공합니다. 마치 행 0에서 행 5로 이동 한 다음 행 4, 행 0으로 이동 한 것처럼 textviewDidEndediting에서 인덱스 path.row를 0으로 표시하는 반면 편집 된 행의 인덱스는 3을 표시해야합니다. – user1531912

4

매우 간단합니다 (cellForRowAtIndexPath). 다만 당신이 textView 다음 코드를 사용하여 행을 찾을 텍스트 뷰 위임 방법에

cell.txtView.tag = indexPath.row; 

처럼 ( textViewDidBeginEditing)

int row = textView.tag; 
+3

이 태그를 설정 한 후에 tableView에서 셀을 추가하거나 제거하는 경우 조심하십시오. 순서가 변경되어 태그에 잘못된 값이 남습니다. – tombeynon

1

는 IOS 8.3 발견 러닝 태그와 textViewDidEndEditing
방법 내에서이 구현; 잘 작동합니다! 스위프트에서

UIView *parentCell = sender 
while (![parentCell isKindOfClass:[UITableViewCell class]]) { // iOS 7 onwards the table cell hierachy has changed. 
    parentCell = parentCell.superview; 
} 

UIView *parentView = parentCell.superview; 

while (![parentView isKindOfClass:[UITableView class]]) { // iOS 7 onwards the table cell hierachy has changed. 
    parentView = parentView.superview; 
} 


UITableView *tableView = (UITableView *)parentView; 
NSIndexPath *indexPath = [tableView indexPathForCell:(UITableViewCell *)parentCell]; 

NSLog(@"indexPath = %@", indexPath); 
3

는 아이폰 OS 8.4에서 실행 :

@IBAction func signInUpBigButtonPressed(sender: SignInUpMenuTableViewControllerBigButton) { 
    // We set the self.indexCellContainingButtonClicked with the cell number selected. 
    var parentCell: UIView! = sender 
    do { 
     parentCell = parentCell.superview! 
    } while !(parentCell is UITableViewCell) 
    let cell = parentCell as! UITableViewCell 
    self.indexCellContainingButtonClicked = self.tableView.indexPathForCell(cell)!.row 
} 
+0

정확히 내가 뭘 찾고 있었는지, 고마워. –

2

이것은 당신이 답장을 보내

CGPoint senderPosition = [sender convertPoint:CGPointZero toView:self.tableView]; 

NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:senderPosition]; 
관련 문제