2010-05-10 2 views
0

문제를 설명하기 전에 먼저 이것이 this question과 다른 뚜렷한 문제임을 지적하겠습니다.UITableViewCellSeparatorStyleNone은 UITableView에서 선택할 때 파란색 구분선을 숨기지 않습니다.

문제점

This screenshot이있는 tableView 설정 휴식 찍은 : didSelectRowAtIndexPath :, 당신은 시뮬레이터 (이미지의 맨 오른쪽)에서 볼 수 있듯이, 상기 하나의 픽셀 파란색 선있다 선택한 셀의 아래쪽. 이것은 클라이언트가 요청한 디자인이 아니며이 앱의 동작 방식도 아닙니다. 선택 항목에도 구분 기호가 없어야합니다.

내가 처음 펜촉 (.xib) 파일을 해당과 사용자 정의있는 UITableViewCell 클래스를 사용하여이 테이블보기를 설계하고 선택에 아무런 문제가 없었다 것 여기 있어 방법 : 원하는대로 분리가 숨겨져 있었다. 예측 계층 구조의 모든 오버 헤드로 인해 스크롤이 느려졌 기 때문에 맞춤형 셀을 수정하여 Loren Brichter의 fast scrolling solution을 사용했습니다. 이제 스크롤링 속도가 훨씬 빠르지 만 필자의 삶에 대한 분리 기호를 제거 할 수는 없습니다. 나는 위의 스크린 샷의시

을 시도했습니다 무엇

...

  • 테이블 뷰는 IB에서 "구분 [없음]"이 없습니다. 당신은 스크린 샷에서 볼 수 있듯이, 내가 원하는대로 separatorStyle이 설정되어 있는지 증명할 수있는 사용되지 않는 라인을 삽입 self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

: 테이블보기를 포함

  • 의 UIViewController는 viewDid로드에서이 라인을 가지고있다. 다른 테스트는 tableView와 self.tableView가 동일한 중단 점에서 동일한 포인터임을 확인합니다.

    또한 tableView.separatorColor를 검정색으로 설정하고 선택을 취소 할 때까지 동일한 결과가 나타납니다. 셀이 선택 될 때까지 올바른 모양을 유지합니다.


    Manjunath : 여기에 셀을 건드렸는지 아닌지에 따라 대체 배경을 그리는 데 사용하는 코드가 있습니다. 스크린 샷에서 차이점을 볼 수 있습니다. 이 drawContentView:에 UIImageCell.m에서 호출되는

    if(self.highlighted) { 
        textColor = [UIColor blackColor]; 
        UIImage *bg = [UIImage imageNamed:@"image-cell-background_highlighted.png"]; 
        [bg drawAtPoint:CGPointMake(0.0, 1.0)]; 
    } 
    else { 
        UIImage *bg = [UIImage imageNamed:@"image-cell-background.png"]; 
        [bg drawAtPoint:CGPointMake(0.0, 0.0)]; 
    } 
    

    씨 Brichter의 ABTableViewCell 슈퍼 클래스에서 상속하는 방법.

  • 답변

    2

    크리스, I는 참조 :

    - (void)setFrame:(CGRect)f 
    { 
    [super setFrame:f]; 
    CGRect b = [self bounds]; 
    b.size.height -= 1; // leave room for the seperator line 
    [contentView setFrame:b]; 
    } 
    

    셀의 높이가 셀이 선택됩니다 실제 셀 이상의 화소 짧은이므로 것을 1 픽셀 선이 선택 색상의 색상으로 흐려집니다. 분리자인 것처럼 보일 수도 있지만 실제로는 선택 색상입니다.

    테스트하려면 위의 행을 2 픽셀 이상 짧게 변경하여 문제가 발생하는지 확인하십시오.

    - (void)viewDidLoad 
    { 
    self.title = @"Fast Scrolling Example"; 
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; 
        [super viewDidLoad]; 
    } 
    

    및 주석 : -drawContentView에서

    // if(self.selected) 
    // { 
    // backgroundColor = [UIColor clearColor]; 
    // textColor = [UIColor whiteColor]; 
    // } 
    // 
    

    , 당신은하지 않았다 경우 무슨 일이 일어날 지 모방하는

    업데이트 : FastScrollingExample 프로젝트의 -rootViewController가이 변경하여

    선택 색상을 보여 주면 다음과 같은 스크린 샷을 얻습니다 :

    alt text http://files.me.com/mahboud/7k656q

    친숙한가요?

    어떻게이 문제를 해결할 수 있습니까? 셀을 선택할 필요가 없으면 셀 선택을 비활성화하십시오. 그렇지 않으면 셀을 선택하는 경우 rect를 크게 만들어야 -drawConentRect에 자신이 선택한 색상으로 칠할 때 기본 선택 색상이 표시되지 않습니다.

    +1

    아, 고마워, 마흐! 그 이유로 애플이나 애플을 찾고 있었지만 ABTableViewCell에 있었다. 이 라인을 주석 처리하는 것이 트릭을 만들었습니다! '// b.size.height - = 1; // 분리 자 라인을위한 공간을 남겨 두라 .' – clozach

    1

    시험해보기 : [cell setSelectionStyle : UITableViewCellSelectionStyleNone];

    가 ABTableViewCell으로 탐구

    // Customize the appearance of table view cells. 
        - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
        { 
    
         static NSString *CellIdentifier = NSLocalizedString(@"Cell",@""); 
         UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
         if (nil == cell) 
         { 
         cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; 
         } 
         [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 
         return cell; 
        } 
    
    +0

    UITableViewCellSelectionStyleNone에는 그리기 코드의 if 문이 YES로 평가되지 않도록하는 부작용이 있습니다. (위의 추가 코드 블록을 참조하십시오.) 여기에서 열악한 그래픽을 선호하지만 솔루션은 UITableViewCellSelectionStyleGray의 형태로 덜 눈에 띄는 선택 오버레이를 제공합니다. 고마워, Manjunath! – clozach

    관련 문제