尝试制作一个加载更多的单元格,但是我不能让它出现在其他单元格后面,抱歉模糊不清但是生病了我的代码......
- (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 :(得分: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;
}