2012-01-27 1 views
0

정확하게 질문을 표현할 수 있을지 모르겠다. 자세한 내용은 여기에있다. UITableView를 사용하여 사용 가능한 글꼴 목록을 표시하고 있습니다. 목록을 표시하면 한 번에 약 12 ​​행만 표시되므로 이전에 선택한 글꼴이 아직 표시되지 않으면 처음보기를 표시 할 때 선택할 수 없습니다.아직 표시되지 않은 UITableView 행을 선택하는 방법은 무엇입니까?

내가 원하는 것은 셀이 선택되어 있고보기가 나타날 때 목록 중앙에 표시하는 것입니다. 필요에 따라 jQuery과 만 데이터를로드,이 최고이기 때문에 그러나 나는 얻을 수 있습니다 :

이 편집 나는이 시도했지만 작동하지 않습니다 (셀이 간략하게 만 선택되어 스크롤하는 동안) :

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     static NSString *CellIdentifier = @"Cell"; 
     UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if(cell==nil){ 
      cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
     } 
     [cell.textLabel setText:[fontArray objectAtIndex:indexPath.row]]; 
     [cell.textLabel setFont:[UIFont fontWithName:[fontArray objectAtIndex:indexPath.row] size:16]]; 
     [cell setSelectionStyle:UITableViewCellSelectionStyleBlue]; 
//select the cell/row if it matches the current font 
     if([cell.textLabel.text isEqualToString:currentFontName]){ 
      cell.selected=YES; 
     } 
     NSLog(@"returning cell %@",cell.textLabel); 
     return cell; 
    } 

답변

0

다른 스레드에서 해결책을 발견했습니다. 문제는 세포를 재사용하는 것과 관련이 있습니다. 셀을 다시 사용하지 않으면 모든 것이 제대로 작동합니다. 셀을 다시 사용하면 하나의 항목 만 선택되었을 때 여러 개의 체크 표시가있는 문제가 발생했습니다. 기여한 사람들에게 감사드립니다.

편집 : 내 자신의 질문에 대답해서는 안되는 경우 나에게 말해주십시오 ... 또한 질문을 해결하는 적절한 방법을 말해주십시오!

편집 2 :이 스레드는 또한 (C 지식의 나의 부족을 보여주는) UITableViewCell going black when selected programmatically

+0

FWIW, 셀을 재사용하지 않으면 scrollls 끔찍한 테이블을 만드는 좋은 방법입니다. 셀이 다시 사용될 때 버그가 셀 상태를 다시 설정하지 않는 것 같습니다. – smparkes

0

아마도이 방법이 맞지만 포인터 비교를 통해 NSString을 평등하게 테스트 할 수는 없습니다. == 대신 - (BOOL)isEqualToString:(NSString *)aString이 필요합니다.

+0

isEqualToString 부품 작품 도움이되지만 스크롤하는 동안 셀이 선택된 상태로 유지되지 않습니다. 처음 보았을 때 선택되고 다시 선택 취소됩니다. 내 문제를 더 정확하게 반영하기 위해 내 게시물을 수정했습니다. 감사. – wayneh

+0

Ah. 당신이 원하는 것 같아요 - (void) scrollToRowAtIndexPath : (NSIndexPath *) indexPath atScrollPosition : (UITableViewScrollPosition) scrollPosition animated : (BOOL) animated'. – smparkes

+0

원하는 행에 표를 가운데에 배치해야합니다. 나는 'de-select'부분에 대해 확신하지 못합니다. 그것은 내가 볼 수있는 선택 상태를 잃어서는 안됩니다 ... – smparkes

1

1-- (BOOL)isEqualToString:(NSString *)aString

(1A)를 사용하여 비교를 - 대체 시험

if([cell.textLabel.text isEqualToString:currentFontName]){ 
    cell.selected=YES; 
} 

cell.selected = [cell.textLabel.text isEqualToString:currentFontName]; 

1B

로 - 당신이 선택한 글꼴을 표시해야하는 경우 이전에 있다고 할 수있다 TableView로드 중 :

NSIndexPath * selFntPath = [NSIndexPath indexPathForRow: [fontArray indexOfObject: currentFontName] 
               inSection: 0]; 

[tableView scrollToRowAtIndexPath: selFntPath 
       atScrollPosition: UITableViewScrollPositionMiddle 
         animated: NO]; 

2 - 셀을 선택 취소하지 않았는지 확인하십시오.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 대리인 방법입니다.

이것은 대부분의 샘플 코드에서 일반적인 동작입니다.

옵션 : 당신이 시스템 선택 행을 표시합니다 (즉, accessoryType 재산 셀을 사용하여 체크 표시) 사용자 선택에 대한 선택 속성을 유지하고 특정 제어를 전환 할 수 있습니다.

+0

1-ok, 게시 된 코드를 2 번 변경했습니다. 내가 볼 수있는 문제는 몇 번 스크롤하고 채워질 때까지 항목이 TableView에 없다는 것입니다. 목록에 포함되면 위에서 설명한 빠른 선택/선택 해제가 나타납니다. – wayneh

+0

좋아요. 내 대답을 업데이트했습니다. –

+0

TableView에 아직 행이 없기 때문에 1b가 작동하지 않습니다! – wayneh

관련 문제