0

私のテーブルビューセルでは、配列要素の内容を単一のセルに表示する必要があり、新しい内容を挿入した場合、以前の内容は上書きされません。以前の内容と新しい内容は順番に表示される必要があります。私のコード

- (void)viewDidLoad
{
[super viewDidLoad];


NSArray *arr=[NSArray arrayWithObjects:cnfqty,cnftitle,cnfrate, nil];

//cnfqty,cnftitle,cnfrate are NSString

finarray=[[NSMutableArray alloc]init];
[finarray addObjectsFromArray:arr];
NSLog(@"%@",finarray);


}

- (void)viewDidUnload
{
[super viewDidUnload];

}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

// Return the number of sections.
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [finarray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

{
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

    UILabel *lab=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 40, 20)];
    lab.text=[finarray objectAtIndex:indexPath.row];
    [cell.contentView addSubview:lab];

}
// Configure the cell...

return cell;
}

私のコードで直面している問題は、各文字列が各セルに表示され、新しい文字列を挿入すると以前の内容が消えて新しい内容だけが表示されることです。

この質問について明確に理解するために、オンライン ショッピング用の「カートに追加」サービスを実装しようとしています。概念に従って、さまざまな製品からアイテムを追加する必要があり、製品情報を保存し、詳細をテーブル ビューに表示する必要があります。 .しかし、私はそれを取得していません..

親切にガイドしてください..よろしくお願いします..

4

4 に答える 4

3
  • (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

       UITableViewCell *cell = (UITableViewCell*)[self.YourTableName dequeueReusableCellWithIdentifier:nil];        
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
    }
    
    
        return cell; 
    }
    

    ReusablecellIdentifier nil を使用して、正しく機能するようにします.....

于 2012-08-13T11:52:03.467 に答える
1

あなたのコードcellForRowAtIndexPathは少しずれています。セルを初期化する前に、セルが nil かどうかを確認する必要があります。どこかからブラケットをコピーしたようですが、条件を省略しました。

それとは別に、再利用されるセルのセルのラベルを変更するコードはありません。新しいものにのみテキストを設定します。ラベルを再利用するために追跡しやすいのは、タグを付けることです。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  static NSString *CellIdentifier = @"Cell";
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if(cell == nil)
  { // set up brand new cell
      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
      UILabel *lab=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 40, 20)];
      lab.tag = 150; // some int you can keep track of, possibly make it a define.
      [cell.contentView addSubview:lab];
  }
  // configure cell
  UILabel *cellLabel = (UILabel *)[cell.contentView viewWithTag:150]; // there's that tag again
  cellLabel.text = [finarray objectAtIndex:indexPath.row];
  return cell;
}
于 2012-07-25T20:13:14.790 に答える
1

「finarray」を作成して、各オブジェクトに配列を格納します(つまり、一種の二次元配列が必要です)。でcellForRowAtIndexPathから配列を抽出finarrayindexPath.row、抽出した配列をループしてコンテンツを入力します。finarray の最初の各配列には、1 つのオブジェクトのみが含まれます。セルのコンテンツを変更すると、実際には、編集したセルのインデックスにある配列にもう 1 つのオブジェクトが追加されます。次に、データをリロードすると、テーブルに新しく追加されたデータが表示されます。編集したセルの行の高さを増やす必要があるため、必ずその行の高さを管理してください。

- (void)viewDidLoad
{
[super viewDidLoad];

//bla bla bla whatever you had here

NSMutableArray *arr1=[NSMutableArray arrayWithObjects:cnfqty, nil];
NSMutableArray *arr2=[NSMutableArray arrayWithObjects:cnftitle, nil];
NSMutableArray *arr3=[NSMutableArray arrayWithObjects:cnfrate, nil];

NSMutableArray *arrMain=[NSMutableArray arrayWithObjects:arr1, arr2, arr3, nil];


finarray=[[NSMutableArray alloc]init];
[finarray addObjectsFromArray:arr];

}


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

//bla bla bla the code to initiate the cell

NSArray *tmpArray = [finarray objectAtIndex:indexPath.row];

for(int i = 0; i<tmpArray.count;i++){
  //create the label
  //set the frame, making sure that origin.y is multiplied by "i"
  //set label's text as [tmpArray objectAtIndex:i]
  //add the label to cell
}

return cell;
}
于 2012-07-25T20:15:58.487 に答える
1

cellForRowAtIndexPath が正しいかどうかわかりません。cell が nil かどうかを確認していないようです。あなたが(どういうわけか括弧内に)いる場合、その if(cell == nil) ステートメント内で lab.text のみを更新しているようです。

おそらく、次のようなものになるはずです。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    static NSString *CellIdentifier = @"Cell";
    UILabel *lab; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];  

    if(cell == nil){
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];      
        lab=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 40, 20)];
        lab.tag = 1; // Really any arbitraty number
        [cell.contentView addSubview:lab];  
    }else{
        lab = [cell.contentView viewWithTag:1]
    }

    // Configure the cell... 
    lab.text=[finarray objectAtIndex:indexPath.row];      

    return cell; 
}
于 2012-07-25T20:17:00.543 に答える