2011-10-18 10 views
0

私はUITableViewを持っています。このテーブルにセルを追加したり削除したりできます。私は2つのボタンも持っています。 1ボタンはセルのテキストに "1"を追加します。これは1で、基本的に+ボタンを押すとカウントし、 - ボタンを押すとカウントします。私の問題は最後のセルにあります。 5つのセルを追加すると、問題のある5番目のセルが追加されます。私が200のセルを200番目のセルに追加すると、問題は私が - ボタンを押すと、他のすべてのセルが押されて青くなり、このボタンが青くなります。セルのテキストが0のときに押しても白くなります。押したときに他のセルのように青色に変わらないようにします。ここに私のコードです:tableViewの奇妙なバグ

- (IBAction)subtractLabelText:(id)sender 
{ 
    cell = (UITableViewCell*)[sender superview];  

    if ([[cell.textLabel text] intValue] == 0){ 
     [newBtn setEnabled:NO]; 
    } 
    else{ 
     cell.textLabel.text = [NSString stringWithFormat:@"%d",[cell.textLabel.text  
     intValue] -1]; 
     [newBtn setEnabled:YES]; 
    } 
} 

このメソッドはサブ " - "ボタンに接続されています。また、テキストが= 0のときにボタンを押すとボタンがありますが、押したときにセルが選択され、テーブルのセルが青色に変わります。助けてください!みんなありがとう!

cellForRow:UIは「について知って」いないという点での推測では

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

    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
     reuseIdentifier:CellIdentifier]; 
    } 
    cell.imageView.image = [imageArray objectAtIndex:indexPath.row];  
    cell.textLabel.text = [cells objectAtIndex:indexPath.row]; 

    newBtn = [[UIButton alloc]init]; 
    newBtn=[UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [newBtn setFrame:CGRectMake(260,20,55,35)]; 
    [newBtn addTarget:self action:@selector(subtractLabelText:) 
     forControlEvents:UIControlEventTouchUpInside]; 
    [newBtn setTitle:@"-" forState:UIControlStateNormal]; 
    [newBtn setEnabled:YES]; 
    [cell addSubview:newBtn]; 

    subBtn = [[UIButton alloc]init]; 
    subBtn=[UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [subBtn setFrame:CGRectMake(200,20,55,35)]; 
    [subBtn addTarget:self action:@selector(addLabelText:) 
     forControlEvents:UIControlEventTouchUpInside]; 
    [subBtn setTitle:@"+" forState:UIControlStateNormal]; 
    [subBtn setEnabled:YES]; 
    [cell addSubview:subBtn]; 
    return cell; 
} 
+0

あなたは '-cellForRowAtIndexPath'メソッドからコードを投稿してください。 –

+0

はい、私は大好きです! – iProRage

答えて

0

cellForRowAtIndexPathメソッドに基づいて、それらが再利用されているかどうかに関係なく、新しいセルを作成して各セルに追加します。

あなたのコードは次のようなものをやっている:はい、それへの参照をつかむ場合

  • 再利用デキューされるセルが/あり

    1. 確認してください。いいえの場合は、新しいものを作成します。
    2. 戻るに
    3. (あなたの間違いはここにある)のセルにボタンにあなたが既存のセルを再利用する場合は、ステップ2で、このセルがすでに持っていることを想像し

    を使用するには、テーブルビューのために、細胞をXYZを追加ボタンXYZはそれに追加されたので、あなたが本質的に2つの余分なボタンを追加する必要はありませんでした。

    セルボタンを設定するコードをif (cell == nil)ループ内に移動して、新しいセルオブジェクトを初期化する場合にのみ、ボタンを作成してコンテンツビューに追加する必要があります。

    また、あなたの質問に直接関係していないが、それにもかかわらず関係するかもしれない以下のコメントをご覧ください。

    ============================================== ====================

    は は

    -

    これは解決されません[EDITは、上記の答えは、しかし、これにも関連しているので、私はそれをここでLEFT]あなた問題が、あなたはセルのcontentviewの代わりに、直接セルに、すなわちにあなたのボタンを追加する必要があります。

    [cell.contentView addSubView:buttonABC]; 
    

    ことを行うのならば、あなたは追加/あなたの減算にセル参照を取得するために二回スーパーを呼び出す必要があります方法:

    のUITableViewCellオブジェクトのコンテンツビューのAppleのドキュメントから

    cell = (UITableViewCell*)[[sender superview] superview];  
    
    は、細胞によって表示されるコンテンツのデフォルトのスーパービュー です。あなたは、単に追加のビューを追加すること により細胞をカスタマイズしたい場合、それらは、細胞の移行 へと編集モードのうちとして適切に配置されるように、あなたはコンテンツ ビューに追加する必要があります。

  • +0

    @iProRageが、それはまた、実際に 'addSubview'小文字V.です! – Rog

    +0

    完璧!!!!!:Dおかげさまで、皆様のご協力をよろしくお願い致します!!:D – iProRage

    0

    、私は、それはUITableViewCell sが再利用されているかに関係していると言うだろうそれらのセルのサブビューボタン。

    は、再利用可能な細胞(その効果にあなたは関係なく、常にcell==nilかどうかの新しいUITableViewCellを作成している)をデキュー-cellForRowAtIndexPath内のコードをコメントアウトしてみます。

    編集: あなたは-subtractLabelTextnewBtnを参照しているが、これは必ずしもメッセージを送信し、ボタンを参照していないIVARです。代わりに[sender setEnabled:NO]を試してください。

    +0

    うーん、私はそのコードと 'if'文をコメントアウトしようと、それは:(任意のより多くのアイデアを仕事didntは?助けてくれてありがとうを経由して! – iProRage

    +0

    編集の答え... – cgull

    +0

    大丈夫私はこれを試してみましたが、それは悲しいことdidntは何を行います...任意のより多くのアイデア?おかげで芽!あなたの代わりに、メッセージ送信者のこの 'newBtn'変数を使用しているあなたのコード内の他の場所のための – iProRage