2012-04-23 1 views
0

아래로 스크롤하면 tableView의 텍스트가 사라집니다. 프로그래밍 방식으로 채워진 TableView에서 화면을 새로 고치지 않습니다.

enter image description hereenter image description here

그리고 내 코드는 다음과 같습니다

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

    return [screenDefBuild.elementsToTableView count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *MyIdentifier = @"MyIdentifier"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier]; 
    } 

    ScreenListElements *currentScreenElement = [screenDefBuild.elementsToTableView objectAtIndex:indexPath.row]; 
    cell.textLabel.text = currentScreenElement.objectName; 

    currentRow++;  
    return cell; 
} 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    tableView = [[UITableView alloc] initWithFrame:self.view.bounds]; 
    [tableView setDataSource:self]; 
    [self.view addSubview:tableView]; 
} 

내가 또한 전체 화면으로 내 테이블보기를 채우려. (상단에 회색 띠).

+0

이 코드 숨기기 // if (cel == nil) .... then scroll now – akk

+2

이러한 주석은 모두 예외적으로 나쁜 아이디어이며 테이블 뷰에 대한 여러 가지 시스템 최적화를 무효화합니다. – jackslash

+0

회색 스트랩 문제를 해결하려면 tableview 배경색을 흰색으로 지정하십시오. – Charan

답변

2

난 당신이, 내가 그 파괴 코드를 내기 것 동안 그 사용이 변수

currentRow++; 

그러나 무엇 이건 무슨 일을하는지 모른다.

UITableView은 이전에 화면에 있었는지 여부에 관계없이 셀이 화면에 나타날 때마다 cellForRowAtIndexPath을 호출합니다. 아래로 스크롤 한 다음 위로 스크롤하면이 변수가 데이터 범위를 넘어서서 증가 할 것이므로 빈 셀이 생깁니다.

언제든지 테이블보기에서 셀을 만들 수있는 방법으로이 메서드를 디자인해야합니다. 세포가 만들어 질 순서에 의지 할 수없고, 스크롤을하면 같은 세포를 반복해서 만들어야 할 것입니다. indexPath을 사용하여 현재 어떤 셀을 만들고 있는지 파악하십시오. 설문 회색 스트랩의 두 번째 부분에 대한

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UITableView_Class/Reference/Reference.html

+0

더 이상 사용하지 않습니다. 더 이상 존재하지 않지만 문제는 여전히 존재합니다. – Kuba

+2

그러면''[screenDefBuild.elementsToTableView objectAtIndex : indexPath.row]'또는'currentScreenElement.objectName'을 봐야합니다. 왜냐하면 두 번째로 그들이 어떤 이유로 호출 될 때 nil을 반환하기 때문입니다. – jackslash

+0

고마워, 알았어. 내가 알아 내면 다시 게시 할 것입니다. – Kuba

0

않음. 현재 뷰에 테이블 뷰를 추가하고 있으므로 self.view.frame 크기 속성을 사용해야하지만 원점은 사용하지 않아야합니다. 이 값을 0,0으로 설정하려고합니다.

변경

tableView = [[UITableView alloc] initWithFrame:self.view.bounds]; 

제대로 모든 것을 할 것대로, 이상하다 당신의 질문 -의 첫 번째 부분에 관해서는
CGRect viewFrame=self.view.frame; 
viewFrame.origin=CGPointZero; 
tableView = [[UITableView alloc] initWithFrame:viewFrame]; 

합니다. 내가 제안 할 수있는 한 가지는 viewDidLoad 끝에 [tableView reloadData];을 추가하는 것입니다.

+2

그렇지 않습니다. 뷰의 범위는 원점'CGPointZero'를 가지고 있습니다 (변경하지 않는 한). 경계는 자체 좌표에서보기의 내부 공간입니다. 또한'viewDidLoad'의 끝에'reloadData'를 추가하는 것은'tableView'가 채워지기 때문에 도움이되지 않을 것입니다 처음에는 스크롤링 후에 실패하지만 실패합니다. 'viewDidLoad'는 여기서 다시 호출되지 않습니다. – jackslash

+0

맞아, view.frame과 혼동스러워. 'viewDidLoad'에 관해서 - 저는 그것이 블라인드 샷과 같았습니다. –

관련 문제