2

わかりました、各セルにラジオ ボタンを含むシンプルなテーブル ビューを作成しました。これは、セルが繰り返される理由を確認するために行われます。セルが実際に繰り返されることを示すために、Rows を途方もなく高いカウントに設定しました。この単純なプロジェクトの目標は、このトピックに関する投稿がいくつかあり、正しい結果が得られないため、この問題を解決するために健全な結論に達することです。ユーザーがセル内のボタンを選択すると、そのセルとそのセルのみが影響を受ける必要があります。コード全体を次に示します。

    #import "faQViewController.h"

     @interface faQViewController ()

    @end

    @implementation faQViewController
    @synthesize button1,button2;

    - (void)viewDidLoad
    {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    }

     - (void)viewDidUnload
    {
     [super viewDidUnload];
     // Release any retained subviews of the main view.
    }

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
     if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
    } else {
        return YES;
    }
    }

    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return 30;


    }


    -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath   *)indexPath{
    static NSString *cellIdentifier =@"cell";
    button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button1 addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
    button1.frame = CGRectMake(0, 0, 22, 32);
    [button1 setImage:[UIImage imageNamed:@"radioOff.png"] forState:UIControlStateNormal];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell ==nil) {        
        cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier
                 ] autorelease];
        cell.selectionStyle = UITableViewCellSelectionStyleGray;
         [cell.contentView
          addSubview:button1];
    }

   // cell.imageView.image = [UIImage imageNamed:@"radioOff.png"];


    return cell;
}

    -(IBAction)buttonPressed:(id)sender{
    if ([sender imageForState:UIControlStateNormal ]== [UIImage imageNamed:@"radioOff.png"]){
    [sender setImage:[UIImage imageNamed:@"radioOn"] forState:UIControlStateNormal];
    }else {

        [sender setImage:[UIImage imageNamed:@"radioOff.png"] forState:UIControlStateNormal];
    }

}
4

2 に答える 2

1

ダニエルズの回答は、私の問題を解決するために何かを片付けるのに役立ちました。私の問題はsections 0,1,2、一意に作成されているのを見ていましたsecond 3が、 と同じように生成されていたことsection 0です。ここに私の設定があります:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *cellIdentifier = @"cell";

    CustomCell* cell = (CustomCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (!cell) {
        cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
    }

    [cell.textLabel setText:[NSString stringWithFormat:@"SECTION %d", indexPath.section]];

    NSLog(@"SECTION %d", indexPath.section);

    return cell;
}

私が変更する必要があったのは、cellIndentifierそれらをすべて同じ ID に設定していたためです。

NSString *cellIdentifier = [NSString stringWithFormat:@"cell-%d", indexPath.section];
于 2013-07-17T15:50:59.450 に答える
1

セルを再利用しているため、コンテンツを変更しないと、同じセルが他の行に表示されます。セルを割り当てるときにのみコンテンツを設定するため、セルが再利用されてもコンテンツは同じままです

それで

  //Here you tell the tableView to re use a cell if one is available for reuse
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
   //if the cell is nil (none available for reuse)
    if (cell ==nil) {        
        //you create the cell and set its content
        cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier
                 ] autorelease];
        cell.selectionStyle = UITableViewCellSelectionStyleGray;
         [cell.contentView
          addSubview:button1];
    }
    //return the cell
   return cell;

行に応じてセルの内容を変更したい場合は、 cell==nil ブロッ​​クの後に行う必要があります。

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
       //if the cell is nil (none available for reuse)
        if (cell ==nil) {        
            //you create the cell and set its content
            cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier
                     ] autorelease];
            }

          //set the content
        cell.selectionStyle = UITableViewCellSelectionStyleGray;
             [cell.contentView
              addSubview:button1];

        //return the cell
       return cell;

お役に立てれば..

于 2012-07-26T18:01:31.170 に答える