0

私はibooksの本棚のような機能を実装しようとしています.GSBookShelfを使用しています.GSBookShelfは非常にシンプルで簡単です.ボタンをセルとして追加し、うまく機能します.

各ボタンにいくつかのラベルを追加したいのですが、成功しましたが、5回のうち2回ラベルが前のボタンラベルと重なっているとしましょう。

普段はこうして 普段はこうして

時々これが起こります: いつかこうなる

コード:

- (UIView *)bookShelfView:(GSBookShelfView *)bookShelfView bookViewAtIndex:(NSInteger)index {

    NSDictionary *currentArticle = [_bookArray objectAtIndex:index];

    static NSString *identifier = @"bookView";
    MyBookView *bookView = (MyBookView *)[bookShelfView dequeueReuseableBookViewWithIdentifier:identifier];
    if (bookView == nil) {
        bookView = [[MyBookView alloc] initWithFrame:CGRectZero];
        bookView.reuseIdentifier = identifier;
        [bookView addTarget:self action:@selector(bookViewClicked:) forControlEvents:UIControlEventTouchUpInside];

    }
    [bookView setIndex:index];
    [bookView setSelected:[(NSNumber *)[_bookStatus objectAtIndex:index] intValue]];
    //[bookView setFileName:[currentArticle objectForKey:@"name"] ];
    //[bookView setFileName:[currentArticle objectForKey:@"name"] :index];

    UIImage *image = nil;
    image = [self returnCellImagefor:[currentArticle objectForKey:@"imagename"]];
    [bookView setBackgroundImage:image forState:UIControlStateNormal];

    UILabel *_fileLabel=nil;
    _fileLabel =[[UILabel alloc] initWithFrame:CGRectMake(0, 180, 200, 46)];
    _fileLabel.text=[currentArticle objectForKey:@"name"];
    _fileLabel.textColor=[UIColor whiteColor];
    _fileLabel.backgroundColor=[UIColor clearColor];
    _fileLabel.font = [UIFont fontWithName:@"Gill Sans" size:16];
    //_fileLabel.textAlignment=UITextAlignmentCenter;
    _fileLabel.textAlignment = NSTextAlignmentCenter;
    _fileLabel.numberOfLines=0;
    _fileLabel.lineBreakMode = UILineBreakModeWordWrap;
    [_fileLabel sizeToFit];
    [bookView addSubview:_fileLabel];

    return bookView;
}

画像は重なることはありませんが、ラベルが重なることがあります。

なぜこれが起こっているのですか?

4

1 に答える 1

1

bookShelfView 関数をどこに配置しましたか? TableView コードを表示します。問題は、テーブルを下にスクロールすると bookShelfView が再度呼び出されることです。ラベルは 2 つの異なる値に対して 2 回作成されています。

それがオーバーラップの発生を確認する唯一の方法です。これは何度も何度も開始されています。

_fileLabel =[[UILabel alloc] initWithFrame:CGRectMake(0, 180, 200, 46)];

私はあなたのTableViewコードをチェックします。以前にも同様の質問をしたことがあります。(正確ではありません)。UITableView と UILabel の繰り返しを確認してください

于 2013-07-11T16:30:46.617 に答える