1

ボタンを に設定するのに問題がありますUITableviewCell
viewDidLoad、ボタンは正しい場所にあります。しかし、下にスクロールすると、ボタンは別の場所にあります。

これが私のコードです。助けていただければ幸いです。
前もって感謝します。

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

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}

if (indexPath.section == 0 && indexPath.row == 0 && _isAddImageViewLoad == NO) {
    // Add Image Button
    UIButton *addImage = [UIButton buttonWithType:UIButtonTypeCustom];
    UIImage* image = [UIImage imageNamed:@"AddImage@2x"];
    addImage.frame = CGRectMake(110.0f, 10.0f, 110.0f, 110.0f);
    [addImage setImage:image forState:UIControlStateNormal];

    [cell.contentView addSubview:addImage];
    _isAddImageViewLoad = YES;
} else {
    NSDictionary *dictionary = [_items objectAtIndex:indexPath.section];
    NSArray *array = [dictionary objectForKey:@"data"];
    NSString *cellValue = [array objectAtIndex:indexPath.row];
    cell.textLabel.text = cellValue;
}

return cell;

}

4

5 に答える 5

1

これは、セルを再利用しているためであり、else セクションで簡単に解決できないときにボタンが配置されているためです。書いaddImage.hidden = YES;て、あなたのif文に入れますaddImage.hidden = NO;

于 2013-04-24T17:08:15.320 に答える
0

問題はセルの再利用によるものです。ボタンが存在する場合にボタンを削除するには、else 句にコードを追加する必要があります。これを行う 1 つの方法は、ボタンに次のようなタグを付けることです。

addImage.tag = 10;

次に、else 句で:

}else{
    if (cell viewWithTag:10) [[cell viewWithTag: 10] removeFromSuperview];
    ...
于 2013-04-24T17:14:07.720 に答える
0

問題は、セルのデキューが原因です。テーブルビューが最初にセルを作成すると、すべてのセルが

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

コード。しかし、セクション 0 行 0 が画面の外に移動すると、そのセルは再利用可能なセル キューにプッシュされます。

テーブルビューがセクション 0 行 0 を表示する必要がある場合、再利用キューからセルを取得します。最初と同じセルは得られません。これで、ボタン付きのセルが 2 つあるかもしれません。

あなたがすべきことは、セクション 0 行 0 、および他のすべてのセクションと行に対して異なる CellIdentifier を持つことです。セル作成時にボタンも作成します。したがって、tableView が最初にセルを作成した後は、すべてのボタンを作成するわけではありません。

于 2013-04-24T17:14:12.263 に答える
0

次のコード行を見てください。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

このコード行は、UITableViewCells毎回作成されないことを意味します。上下にスクロールすると、それらが再利用されます。上記のコードを使用するUIButtonと、正しい場所に が作成されますが、セルが再利用されると、ランダムな場所にボタンが作成されます。

問題を解決する簡単な方法の 1 つは、上記のコード行を単に次のように変更することです。

UITableViewCell *cell;
于 2013-04-24T17:07:24.750 に答える
0

ほんのいくつかのこと。「AddImage」を使用すると、Retina ディスプレイの場合は自動的に「AddImage@2x」が使用されます。それがあなたの問題を解決するとは思いませんが、奇妙さを引き起こしている可能性があります。

テーブル ビュー セルがビューからスクロールされると、ある意味で「リサイクル」されます。bool を使用して、元のセルがボタンで再度読み込まれないようにしているように見えます。ボタンを常に「上部」に配置したい場合は、ヘッダーを使用してボタンを保持することをお勧めします。セルを再利用するときにボタンが削除されていることを確認することもできます。そうでない場合は、そのセルを再利用する次の行に表示されます。

余談ですが...ボタンは通常、テーブルビューのセルではうまく機能しません。これは、タッチの処理方法が非常に異なるためです。それらを自然に感じさせるのはかなりの修正ですが、それは別の問題です.

それが役立つことを願っています!

于 2013-04-24T17:12:39.310 に答える