0

ユニバーサルアプリを開発しています。このアプリにはUITableViewがあります。問題は、TableViewのヘッダー行がiphoneで6行、iPadで9行の後に繰り返されていることです。

グーグルで検索しましたが、このヘッダーの問題を解決するための解決策が見つかりませんでした。助けてください。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.

    return [tripList count];
}

UiTableview cellForRowAtIndexPathコード:

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

    static NSString *CellIdentifier = @"Cell";

    UILabel *lblTripNumber = nil;
    UILabel *lblTripState = nil;
    UIImageView *imgTripState = nil;
    UILabel *lblStateTitleText = nil;
    UILabel *lblTripNUmberTitleValue = nil;

    static NSUInteger const kTripNumberLabelTag = 2;
    static NSUInteger const kTripStateLabelTag = 3;
    static NSUInteger const kTripImageTag = 4;


    BOOL isiPhone = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone;
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(indexPath.row == 0)
    {
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

            if (!isiPhone) // 1=Ipad        
            {
                lblStateTitleText = [[[UILabel alloc] initWithFrame:CGRectMake(205, 27, 250, (cell.contentView.frame.size.height))] autorelease];
                lblStateTitleText.font = [UIFont boldSystemFontOfSize:32];
            }
            else
            {
                lblStateTitleText = [[[UILabel alloc] initWithFrame:CGRectMake(65, 10, 130, (cell.contentView.frame.size.height))] autorelease];
                lblStateTitleText.font = [UIFont boldSystemFontOfSize:16];
            }
            lblStateTitleText.textAlignment = UITextAlignmentLeft;
            lblStateTitleText.backgroundColor = [UIColor clearColor];
            lblStateTitleText.tag = 11;     
            lblStateTitleText.text = @"Trip State"; 
            lblStateTitleText.textColor = [UIColor cyanColor];
            [cell.contentView addSubview:lblStateTitleText];

            if (!isiPhone) // 1=Ipad        
            {
                lblTripNUmberTitleValue = [[[UILabel alloc] initWithFrame:CGRectMake(445, 27, 290, (cell.contentView.frame.size.height))] autorelease];
                lblTripNUmberTitleValue.font = [UIFont boldSystemFontOfSize:32];
            }
            else
            {
                lblTripNUmberTitleValue = [[[UILabel alloc] initWithFrame:CGRectMake(180, 10, 250, (cell.contentView.frame.size.height))] autorelease];
                lblTripNUmberTitleValue.font = [UIFont boldSystemFontOfSize:16];
            }
            lblTripNUmberTitleValue.textAlignment = UITextAlignmentLeft;
            lblTripNUmberTitleValue.backgroundColor = [UIColor clearColor];
            lblTripNUmberTitleValue.tag = 12;       
            lblTripNUmberTitleValue.text = @"Confirmation#";    
            lblTripNUmberTitleValue.textColor = [UIColor greenColor];
            [cell.contentView addSubview:lblTripNUmberTitleValue];  

        }

    }
    else 
    {   
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

            CGFloat xIndex = 6.0;       
            CGFloat xIpadIndex = 6.0;

            CGFloat TripNumberLabelWidth = 130.0;

            if (!isiPhone) // 1=Ipad        
            {
                imgTripState = [[[UIImageView alloc] initWithFrame:CGRectMake(xIndex, 18, 50, 64)] autorelease];
            }
            else
            {
                imgTripState = [[[UIImageView alloc] initWithFrame:CGRectMake(xIndex, 8, 32, 32)] autorelease];
            }

            imgTripState.tag = kTripImageTag;
            [cell.contentView addSubview:imgTripState];

            xIndex +=73;
            xIpadIndex +=85;

            if (!isiPhone) // 1=Ipad        
            {
                lblTripState = [[[UILabel alloc] initWithFrame:CGRectMake(xIpadIndex, 25, TripNumberLabelWidth, (cell.contentView.frame.size.height))] autorelease];
                lblTripState.font = [UIFont boldSystemFontOfSize:38];
            }
            else
            {
                lblTripState = [[[UILabel alloc] initWithFrame:CGRectMake(xIndex, 1, TripNumberLabelWidth, (cell.contentView.frame.size.height))] autorelease];
                lblTripState.font = [UIFont boldSystemFontOfSize:20];
            }
            lblTripState.textAlignment = UITextAlignmentLeft;
            lblTripState.backgroundColor = [UIColor clearColor];
            lblTripState.tag = kTripStateLabelTag;      
            lblTripState.textColor = [UIColor colorWithRed:(0.0/255) green:(241.0/255) blue:(216.0/255) alpha:1.0f];
            [cell.contentView addSubview:lblTripState];

            xIndex +=132;
            xIpadIndex +=120;

            if (!isiPhone) // 1=Ipad
            {
                lblTripNumber = [[[UILabel alloc] initWithFrame:CGRectMake(xIpadIndex, 25, TripNumberLabelWidth, (cell.contentView.frame.size.height))] autorelease];
                lblTripNumber.font = [UIFont boldSystemFontOfSize:35];
            }
            else
            {
                lblTripNumber = [[[UILabel alloc] initWithFrame:CGRectMake(xIndex, 0, TripNumberLabelWidth, (cell.contentView.frame.size.height))] autorelease];
                lblTripNumber.font = [UIFont boldSystemFontOfSize:18];
            }

            lblTripNumber.textAlignment = UITextAlignmentLeft;
            lblTripNumber.backgroundColor = [UIColor clearColor];
            lblTripNumber.tag = kTripNumberLabelTag;        
            lblTripNumber.textColor = [UIColor greenColor];
            [cell.contentView addSubview:lblTripNumber];

        }else
        {
            // A reusable cell was available, so we just need to get a reference to the subviews using their tags.
            lblTripNumber = (UILabel *)[cell.contentView viewWithTag:kTripNumberLabelTag];
            lblTripState = (UILabel *)[cell.contentView viewWithTag:kTripStateLabelTag];
        //  imgTripState = (UILabel *)[cell.contentView viewWithTag:kTripImageTag];
        }

        lblTripNumber.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
        lblTripState.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;


        int indCount = indexPath.row -1;
        TripDetails *trip = [tripList objectAtIndex:indCount];
        lblTripNumber.text = trip.tripNumber;
        lblTripState.text = trip.tripState;


    // Configure the cell...

    return cell;
}
4

4 に答える 4

1

おそらく、TableData には 6 つの項目しかありません。

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

   return [TableData count];

}

あなたの場合、「TableData」は「tripList」です。

于 2012-05-04T14:38:44.753 に答える
1

わかった、削除した

if (cell == nil) 

そしてそれはうまくいきました。実際には、最初のヘッダー行でタグを探していましたが、その値を置き換えることができなかったため、問題が発生していました。

于 2012-05-18T07:40:06.053 に答える
0

セクションのviewForヘッダーを確認してください。ヘッダー ビューに配列を使用している場合、この配列オブジェクトには適切にメモリが割り当てられません。すべての出現に対して最後のオブジェクトを使用し、古いオブジェクトを置き換えます。オブジェクトを追加する前に、配列のメモリ割り当てオブジェクトを作成します。これが解決策かどうか教えてください

于 2012-05-04T14:42:07.573 に答える
0

あなたのコードはセルを再利用しようとしますが、それをコーディングした方法は間違っています。適切なパターンについては、こちらの回答を参照してください。簡単に言うと、共有セル属性はif (cell == nil)セクションでのみ定義し、ラベル テキストなどの行固有の属性は、このセクションの外で定義する必要があります。これは、インデックス 0 の行には当てはまりません。

于 2012-05-04T14:45:35.397 に答える