0

上下にスクロールすると、tableView のテキストが消えます。

ここに画像の説明を入力 ここに画像の説明を入力

そして私のコードは次のとおりです。

- (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];
}

また、テーブル ビューを画面全体に表示したいと考えています。(上部のグレーのストラップ)。

4

2 に答える 2

2

この変数で何をしているのかわかりません

currentRow++;

しかし、あなたがそれを何に使うにせよ、私はそれがあなたのコードを壊すことに賭けます。

これは、セルが画面に表示されたことがあるかどうかに関係なく、セルが画面に表示されるたびUITableViewに呼び出されます。cellForRowAtIndexPath下にスクロールしてから上にスクロールすると、この変数はデータの境界を超えて増加するため、空のセルが得られます。

テーブル ビューに任意のセルをいつでも作成できるように、このメソッドを設計する必要があります。セルが作成される順序に依存することはできません。スクロールすると、同じセルを何度も作成する必要があります。indexPath現在作成しているセルを特定するためにのみ使用してください。

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

于 2012-04-23T08:24:44.757 に答える
0

質問の 2 番目の部分の答え - 灰色のストラップ。テーブルビューを現在のビューに追加しているためself.view.frame、原点ではなく size プロパティを使用する必要があります。これを 0,0 に設定します。

変化する

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

CGRect viewFrame=self.view.frame;
viewFrame.origin=CGPointZero;
tableView = [[UITableView alloc] initWithFrame:viewFrame]; 

あなたの質問の最初の部分については、すべてを適切に行っているように見えるので、奇妙です。私が提案できることの1つは[tableView reloadData];、の最後に追加することですviewDidLoad

于 2012-04-23T08:36:21.807 に答える