2013-01-05 105 views
1

試圖讓它加載更多的細胞,但我不能讓它出現在其他細胞後,遺憾的是模糊的,但生病你展示我的代碼...表視圖加載更多單元格?

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

它所做的就是返回數據從數組中,並沒有細胞後加載更多..非常感謝。

+0

行聲明在哪裏? – Andy

+0

你可以從didselect行發佈一些代碼嗎? –

+0

更新後的代碼。 – rjg

回答

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; 
} 
+0

感謝Hermann,用代碼試過了,它仍然沒有返回底部加載更多單元格,只剩下其餘部分,我想出於某種原因,額外的單元格沒有被添加到顯示數據,indexPath。當我把這個'NSLog(@「%i」,indexPath.row);'它然後在3日誌:'0 0 1'如果你有任何線索? – rjg

+0

@RyanGittings,請繼續並提供更多的調試數據。編輯你的問題。NSLog計數在numberOfRowsInSection中,當前行在cellForRow ...和NSLog中再次計數cellForRow ... so我們看到[rows count]是否在此期間發生了變化。將NSLog語句添加到問題中的代碼中,並提供輸出在對你的問題進行編輯的過程中,讓每個人清楚地看到發生了什麼。 –

+0

全部排序,您的代碼幫助。非常感謝! – rjg

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; 
} 
相關問題