2011-08-31 9 views
0

콘텐츠보기에 대한 두 가지 질문이 있습니다.어떤 콘텐츠보기를 건드릴 지 어떻게 알 수 있습니까?

첫 번째 질문 : tableview 셀에는 두 개의 콘텐츠 뷰가 있습니다. 어떤 것을 만진 지 어떻게 알 수 있습니까?

두 번째 질문 : 오직 콘텐츠보기가 tableview의 첫 번째 섹션에만 나타나길 원합니다. 그러나 tableview를 위로 스크롤하면 내용보기가 세 번째 섹션에도 나타납니다. 이 문제를 어떻게 해결할 수 있습니까?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{  
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    UIImageView *imgView, *imgView1; 
    if(cell == nil) 
    { 
     if (indexPath.section == 0) { 
      cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];  
      cell.textLabel.text = @"test"; 

      imgView = [[UIImageView alloc] initWithFrame:CGRectMake(100,0,20,62)]; 
      [imgView setImage:[UIImage imageNamed:@"1.png"]]; 
      imgView.tag = 10; 
      [cell.contentView addSubview:imgView]; 
      [imgView release]; 

      imgView1 = [[UIImageView alloc] initWithFrame:CGRectMake(200,0,20,62)]; 
      [imgView1 setImage:[UIImage imageNamed:@"2.png"]]; 
      imgView1.tag = 20; 
      [cell.contentView addSubview:imgView1]; 
      [imgView1 release]; 
     } 
    } 
    else 
    { 
     if (indexPath.section == 0) { 
      imgView = (id)[cell.contentView viewWithTag:10]; 
      imgView1 = (id)[cell.contentView viewWithTag:20]; 
     } 
    } 
    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 

    // How do I know left content view is touched or right content view is touched? 
} 

답변

0

1) 각기 다른 방법을 호출 할 수있는 다른 인식기를 각보기에 추가 할 수 있습니다.

// create view 
UIImageView *view = [UIImageView ...]; 
view.userInteractionEnabled = YES; 
// create recognizer 
UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myViewTapped:)]; 
// add recognizer to your view 
[view addGestureRecognizer:recognizer]; 
[recognizer release]; 
// now when user will tap on your view method - (IBAction)myViewTapped:(UIGestureRecognizer); will be called 

2) 셀을 재사용되기 때문에, 전무 잊지하지 않거나 이미 이전 섹션에서 추가 세 번째에서 재사용 된로 (내용보기 unneedfull 뷰에서 제거).

UIView *view2remove = [cell viewWithTag:itsTag]; 
[view2remove removeFromSuperview]; 
+0

코드를 표시하십시오. 나는 초급이다. – user698200

+0

내 대답이 업데이트되었습니다. UIGestureRecognizer에 대한 사과 문서에서 1) 검색은 매우 간단합니다. 2) 업데이트 된 텍스트보기 – Nekto

+0

감사합니다. 두 번째 질문이 해결되었습니다. 어느 뷰를 만졌는지 알면 UIGestureRecognizer가 사용 된 것 같습니다. – user698200

0

게시 한 코드에 중괄호가 없습니다. 그 전에 다른 가새를 추가해야합니다. 아마도 실제 코드는 그렇지 않거나 컴파일되지 않을 것입니다.

else 절에서 지역 변수에 무언가를 할당해도 아무런 변화가 없습니다.

indexPath.section != 0도 수행해야합니다. 아무것도하지 않으면 이전에 만들어진 셀의 내용을 가져올 수 있습니다. 보기가 나타나지 않도록하려면보기를 제거해야합니다. 다음과 같이하십시오 :

for (UIView *subview in cell.contentView.subviews) 
    [subview removeFromSuperview]; 

그러나 섹션 1과 다른 섹션에 대해 다른 셀 식별자를 사용하는 것이 더 쉽습니다. 그런 다음 섹션 3에서 섹션 1에 사용 된 셀을 다시 가져 오지 않고 다시 구성해야합니다. 좋아요 :

NSString *CellIdentifier; 
if (indexPath.section == 0) 
    CellIdentifier = @"Section1Cell"; 
else 
    CellIdentifier = @"OtherSectionCell"; 
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
+0

감사합니다. 두 번째 질문이 해결되었습니다. 그러나 나는 아직도 첫번째 것을 모른다. – user698200

관련 문제