表格视图加载更多单元格?

时间:2013-01-05 11:41:51

标签: iphone objective-c ios uitableview

尝试制作一个加载更多的单元格,但是我不能让它出现在其他单元格后面,抱歉模糊不清但是生病了我的代码......

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [rows count] + 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *postCellId = @"postCell";
    UITableViewCell *cell = nil;

    cell = [self.tableView dequeueReusableCellWithIdentifier:postCellId];

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

    NSUInteger row = [indexPath row];
    NSUInteger count = [rows count];

    if (row == count) {
        loadMore = [[UILabel alloc] initWithFrame:CGRectMake(0, 30, 320, 25)];
        loadMore.backgroundColor = [UIColor colorWithRed:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:1.0];
        loadMore.font = [UIFont fontWithName:@"AvenirNext-Bold" size:18.0];
        loadMore.textColor = [UIColor colorWithRed:60.0 / 255.0 green:58.0 / 255.0 blue:55.0 / 255.0 alpha:1.0];
        loadMore.text = @"Load More...";
        loadMore.textAlignment = UITextAlignmentCenter;
        [cell.contentView addSubview:loadMore];


        displaying = [[UILabel alloc] initWithFrame:CGRectMake(0, 50, 320, 25)];
        displaying.backgroundColor = [UIColor colorWithRed:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:1.0];
        displaying.font = [UIFont fontWithName:@"AvenirNext-Bold" size:12.0];
        displaying.textColor = [UIColor colorWithRed: 115.0 / 255.0 green: 113.0/ 255.0 blue:112.0 / 255.0 alpha:1.0];
        displaying.text = [NSString stringWithFormat:@"Displaying %i Results", rows.count];
        displaying.textAlignment = UITextAlignmentCenter;
        [cell.contentView addSubview:displaying];

    } else {

    dict = rows[indexPath.row];

    thumbimgView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 80, 80)];
    businessLabel = [[UILabel alloc] initWithFrame:CGRectMake(103, 10, 207, 25)];
    locationLabel = [[UILabel alloc] initWithFrame:CGRectMake(103, 35, 207, 35)];
    locimgView = [[UIImageView alloc] initWithFrame:CGRectMake(220, 75, 20, 15)];
    distanceLabel = [[UILabel alloc] initWithFrame:CGRectMake(240, 75, 60, 15)];

    businessLabel.backgroundColor = [UIColor colorWithRed:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:1.0];
    businessLabel.font = [UIFont fontWithName:@"AvenirNext-Bold" size:18.0];
    businessLabel.textColor = [UIColor colorWithRed:60.0 / 255.0 green:58.0 / 255.0 blue:55.0 / 255.0 alpha:1.0];
    businessLabel.text = dict[@"business"];
    [cell.contentView addSubview:businessLabel];

    locationLabel.backgroundColor = [UIColor colorWithRed:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:1.0];
    locationLabel.font = [UIFont fontWithName:@"AvenirNext-Regular" size:14.0];
    locationLabel.text = dict[@"location"];
    locationLabel.textColor = [UIColor colorWithRed: 115.0 / 255.0 green: 113.0/ 255.0 blue:112.0 / 255.0 alpha:1.0];
    locationLabel.numberOfLines = 2;
    locationLabel.lineBreakMode = UILineBreakModeTailTruncation;

    [cell.contentView addSubview:locationLabel];

    listingLoc = [[CLLocation alloc] initWithLatitude:[dict[@"lat"] doubleValue] longitude:[dict[@"lon"] doubleValue]];

    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

    float kilometers = [appDelegate.currentLoc distanceFromLocation:listingLoc] / 1000;

    int milesint = kilometers * 0.621371192;

    NSString *milesOut = [NSString stringWithFormat:@"%i miles", milesint];

    distanceLabel.backgroundColor = [UIColor colorWithRed:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:1.0];
    distanceLabel.font = [UIFont fontWithName:@"AvenirNext-Regular" size:12.0];
    distanceLabel.textColor =  [UIColor colorWithRed:128.0 / 255.0 green:128.0 / 255.0 blue:128.0 / 255.0 alpha:1.0];
    distanceLabel.text = milesOut;
    [cell.contentView addSubview:distanceLabel];

    NSArray *splitImages = [dict[@"image1"] componentsSeparatedByString:@", "];

    icon = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[splitImages objectAtIndex:0]]]];

    [thumbimgView setContentMode:UIViewContentModeScaleAspectFill];
    [thumbimgView setClipsToBounds:YES];

    thumbimgView.image = icon;
    [cell.contentView addSubview:thumbimgView];

    locimgView.image = [UIImage imageNamed:@"location-icon.png"];
    [cell.contentView addSubview:locimgView];

    cell.textLabel.text = dict[@"business"];
    cell.textLabel.hidden = YES;

    }

    return cell;
}

所有这一切都是从数组中返回数据,并且在加载后没有添加任何单元格。非常感谢。

2 个答案:

答案 0 :(得分:1)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSUInteger row = [indexPath row];
    NSUInteger count = [rows count];
    UITableViewCell *cell = nil;    

    if (row == count) {
      // This is the bottom most cell, therefore display the More-Cell
      static NSString *postCellId = @"moreCell";

      cell = [self.tableView dequeueReusableCellWithIdentifier:postCellId];
      if (cell == nil) {  // it cannot be re-used, so create a new one

         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:postCellId];
         // now add all sub views such as labels and buttons. 
         // If the layout is always the same then you may set it here. 

      }
      // Now it is either re-used or newly created. However, it carries all the subviews. 
      // Here set the values. You may set the layout here too, if the layout depends on data.

    } else {
      // Display a regular Post-Cell    
      static NSString *postCellId = @"postCell";

      cell = [self.tableView dequeueReusableCellWithIdentifier:postCellId];
      if (cell == nil) { // it cannot be re-used, so create a new one

         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:postCellId];
         // now add all sub views such as labels and buttons. 
         // If the layout is always the same then you may set it here. 

      }
      // Now it is either re-used or newly created. However, it carries all the subviews. 
      // Here set the values. You may set the layout here too, if the layout depends on data.

    }

    return cell;
}

答案 1 :(得分:0)

我认为你实现这个问题的方式没有问题。我简化了你的代码(主要是在“else”子句中)并创建了一个虚拟数组,一切正常。请注意,我使用新范例来创建表视图单元格,这使得不必使用“if cell is nil”语句。

@implementation TableController {
    NSArray *rows;
}


- (void)viewDidLoad {
    [super viewDidLoad];
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"postCell"];
    rows = @[@"One",@"Two",@"Three",@"Four"];

}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [rows count] + 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"postCell" forIndexPath:indexPath];

    NSUInteger row = [indexPath row];
    NSUInteger count = [rows count];

    if (row == count) {
        UILabel *loadMore = [[UILabel alloc] initWithFrame:CGRectMake(0, 30, 320, 25)];
        loadMore.backgroundColor = [UIColor colorWithRed:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:1.0];
        loadMore.font = [UIFont fontWithName:@"AvenirNext-Bold" size:18.0];
        loadMore.textColor = [UIColor colorWithRed:60.0 / 255.0 green:58.0 / 255.0 blue:55.0 / 255.0 alpha:1.0];
        loadMore.text = @"Load More...";
        loadMore.textAlignment = NSTextAlignmentCenter;
        [cell.contentView addSubview:loadMore];


        UILabel *displaying = [[UILabel alloc] initWithFrame:CGRectMake(0, 50, 320, 25)];
        displaying.backgroundColor = [UIColor colorWithRed:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:1.0];
        displaying.font = [UIFont fontWithName:@"AvenirNext-Bold" size:12.0];
        displaying.textColor = [UIColor colorWithRed: 115.0 / 255.0 green: 113.0/ 255.0 blue:112.0 / 255.0 alpha:1.0];
        displaying.text = [NSString stringWithFormat:@"Displaying %i Results", rows.count];
        displaying.textAlignment = NSTextAlignmentCenter;
        [cell.contentView addSubview:displaying];
    } else {
        cell.textLabel.text = rows[indexPath.row];
    }
    return cell;
}