在UITableView Xcode iOS中滚动时单元格文本重叠

时间:2014-04-14 02:37:27

标签: ios objective-c uitableview

每当我开始在tableView中滚动时,subtitleLabel文本在每一行中都保持相互重叠。我已经尝试过最近4个小时在互联网上的每一次搜索,我点击并试过这个问题。

这是我的ViewController.m

@interface ANViewController()
{

    NSMutableArray *TitleLabel;
    NSMutableArray *SubtitleLabel;
    NSMutableArray *AvatarImages;

}

@end


@implementation ANViewController

@synthesize thetableview;

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.thetableview.delegate = self;
    self.thetableview.dataSource = self;

    TitleLabel = [NSMutableArray array];
    SubtitleLabel = [NSMutableArray array];
    AvatarImages = [NSMutableArray array];

    __block NSArray *posts;

    __block NSData *allNewsData = nil;

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0ul);
    dispatch_async(queue, ^{
        allNewsData = [NSData dataWithContentsOfURL:[NSURL URLWithString: API_URL]];
        NSError *error;
        NSMutableDictionary *allNews = [NSJSONSerialization JSONObjectWithData:allNewsData options:NSJSONReadingMutableContainers error:&error];
        if (error) {
            NSLog(@"%@", [error localizedDescription]);
        } else {
            posts = allNews[@"data"];
            for (NSDictionary *newsPost in posts) {
                [TitleLabel addObject:newsPost[@"title"]];
                [SubtitleLabel addObject:newsPost[@"post_message"]];
                NSString *avatarUrl = AVATAR_URL;
                NSString *avatarExt = @".jpg";
                [AvatarImages addObject:[NSString stringWithFormat:@"%@%@%@", avatarUrl, newsPost[@"user_id"], avatarExt]];
            }
        }
        dispatch_sync(dispatch_get_main_queue(), ^{
            NSLog(@"THIS IS THE MAIN THREAD...");
            [self.thetableview reloadData];
        });
    });

    NSURL *url = [NSURL URLWithString: WEBSITE_URL];
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
    [webView loadRequest:urlRequest];
}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    long count = TitleLabel.count;
    if(count == 0){
        count = 1;
    }
    return count;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *CellIdentifier;
    ANTableViewCell *Cell;
    if(TitleLabel.count == 0){
        NSLog(@"Did with no news");
        CellIdentifier = @"Cell_NoNews";
        Cell = [thetableview dequeueReusableCellWithIdentifier:CellIdentifier];
        if (Cell == nil) {
            Cell = [[ANTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        }
        Cell.noNewsLabel.text = @"No news to display!";
    }else{
        NSLog(@"Did with news");
        CellIdentifier = @"Cell";
        Cell = [thetableview dequeueReusableCellWithIdentifier:CellIdentifier];
        if (Cell == nil) {
            Cell = [[ANTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        }

        Cell.TitleLabel.text = [TitleLabel objectAtIndex:indexPath.row];
        Cell.SubtitleLabel.text = [SubtitleLabel objectAtIndex:indexPath.row];

        NSURL *url = [NSURL URLWithString:[AvatarImages objectAtIndex:indexPath.row]];
        NSData *data = [NSData dataWithContentsOfURL:url];
        UIImage *img = [[UIImage alloc] initWithData:data];
        Cell.AvatarImage.image = img;
    }

    return Cell;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

@end

1 个答案:

答案 0 :(得分:0)

只需更改UITableViewCellStyleSubtitle的{​​{1}},您需要一个异步连接,而不是像您一样的同步:UITableViewCellStyleDefault方法中的NSData *allNewsData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString:API_URL]];阻止你的主线程。

您可以根据需要调整此代码,以便在后台下载:

viewDidLoad