0

最後のセルに load more メソッドを実装しようとしています。実験した後、最終的にセルにさらに負荷を実装することができました(まだ機能はありません)。しかし、XML からコンテンツを読み込んでいるため、少し難しいようです。

これが私がすることです:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

   if([tabelle count]>= 10)
{
    return [tabelle count]+1;
}
else
{
    return [tabelle count];

}
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; }

    if(indexPath.row != [tabelle count] )
{

    cell.textLabel.font = [UIFont fontWithName:@"Arial-Bold" size:14.0];
    cell.detailTextLabel.font = [UIFont fontWithName:@"Arial" size:12.0];
    self.tableView.separatorColor = [UIColor clearColor];

    NSString *TableText = [[NSString alloc] initWithFormat:@"%@", [[tabelle objectAtIndex:indexPath.row] number1]]; 
    NSString *TableText2 = [[NSString alloc] initWithFormat:@"%@", [[tabelle objectAtIndex:indexPath.row] number2]];  

    NSString *cellValue = [NSString stringWithFormat:@"%@", TableText2];
    NSString *cellValue2 = [NSString stringWithFormat:@"%@", TableText];
    cell.textLabel.text = cellValue;
    cell.detailTextLabel.textColor = [UIColor colorWithRed:51.0f/255.0f green:102.0f/255.0f blue:220.0f/255.0f alpha:1.0f];
    cell.detailTextLabel.text = cellValue2;

}
else if(indexPath.row==[tabelle count])

{
    UILabel *loadMore =[[UILabel alloc]initWithFrame: CGRectMake(0,0,320,30)];
    loadMore.textColor = [UIColor blackColor];
    loadMore.backgroundColor = [UIColor clearColor];
    loadMore.font=[UIFont fontWithName:@"Verdana" size:20];
    loadMore.textAlignment=UITextAlignmentCenter;
    loadMore.font=[UIFont boldSystemFontOfSize:20];
    loadMore.text=@"Gimme more!";
    [cell addSubview:loadMore];
}
return cell;

}

load more セル (Gimme more! と表示されます) が最後のセルにポップアップ表示され (ただし、新しい最後のセルは作成されず、通常の最後のセルに表示されるため、その内容に干渉します)、テーブルビュー上にランダムにポップアップ表示されます。

最初の問題は、この方法でそれ自体がビット化されたため、少し変更する必要があったことです。そうしないと、以下のエラーが発生します。

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row == [tabelle count]) {

} else {
    NSString *text = [[self.tabelle objectAtIndex:indexPath.row] number1];

    CGSize textSize = [text sizeWithFont:[UIFont systemFontOfSize:14.0f] constrainedToSize:CGSizeMake(self.tableView.frame.size.width - PADDING * 7, 1000.0f)];
    return textSize.height + PADDING * 7;
}
}

  - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
{
    if(indexPath.row==[tabelle count])
    {
        [self.tableView cellForRowAtIndexPath:indexPath];
    }
}      

そして、ここに私が持っていたエラーがあります(そして、ビューをスクロールするときにまだあることがあります):

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 11 beyond bounds [0 .. 10]'
4

1 に答える 1

1

あなたが投稿したコードにはいくつかの奇妙な点があるようです。最初のスニペットでは、if ステートメントはそれ自体でフロートしているように見えます (カプセル化方法はありませんか?)。heightForRowAtIndexPath では、if ステートメントの then セクションから値を返していません。

[編集] これまでに投稿した内容を次のように書きます。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // I am not the below make sense but that depends on what you are intending
    // I do have a feeling there is a "off by one" issue here
    if ([tabelle count] >= 10) {
        return [tabelle count]+1;
    }else{
        return [tabelle count];
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell;
    if (indexPath.row != [tabelle count] ) {
        cell = [tableView dequeueReusableCellWithIdentifier:@"Cell1"];
        if (cell == nil) {
            [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Cell1"]; }

            cell.textLabel.font = [UIFont fontWithName:@"Arial-Bold" size:14.0];
            cell.detailTextLabel.font = [UIFont fontWithName:@"Arial" size:12.0];
            cell.detailTextLabel.textColor = [UIColor colorWithRed:51.0f/255.0f green:102.0f/255.0f blue:220.0f/255.0f alpha:1.0f];
            self.tableView.separatorColor = [UIColor clearColor];
        }
        NSString *TableText = [[NSString alloc] initWithFormat:@"%@", [[tabelle objectAtIndex:indexPath.row] number1]]; 
        NSString *TableText2 = [[NSString alloc] initWithFormat:@"%@", [[tabelle objectAtIndex:indexPath.row] number2]];  

        cell.textLabel.text = TableText;
        cell.detailTextLabel.text = TableText2;
    }else{
        cell = [tableView dequeueReusableCellWithIdentifier:@"Cell2"];
        if (cell == nil) {
            [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Cell2"]; }
            UILabel *loadMore = [[UILabel alloc] initWithFrame: CGRectMake(0,0,320,30)];
            loadMore.textColor = [UIColor blackColor];
            loadMore.backgroundColor = [UIColor clearColor];
            loadMore.textAlignment = UITextAlignmentCenter;
            loadMore.font = [UIFont boldSystemFontOfSize:20];
            loadMore.text = @"Gimme more!";
            [cell addSubview:loadMore];
        }
    }
    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == [tabelle count]) {
        return 44.0;
    }else{
        NSString *text = [[self.tabelle objectAtIndex:indexPath.row] number1];
        CGSize textSize = [text sizeWithFont:[UIFont systemFontOfSize:14.0f] constrainedToSize:CGSizeMake(self.tableView.frame.size.width - PADDING * 7, 1000.0f)];
        return textSize.height + PADDING * 7;
    }
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    if (indexPath.row == [tabelle count]) {
        // TO-DO: user tapped 'Giimie more'
    }else{
        // TO-DO: user tapped a regular cell
    }
}  
于 2012-05-11T18:19:24.620 に答える