2012-05-05 17 views
0

私は新しいiOS版 に私はチェックのボタンに画像を設定し、私は何を持っていることは、私がタップしたときである のチェックを外す(またはチェック)していた私のテーブルビュー で動的にボタンを作成しています午前にボタンをクリックすると、indexpath行のデータが配列に追加されます。 それを選択解除すると、データが配列から削除されます。助けてください複数のチェックボックスiPhone

-(void)btnForCheckBoxClicked:(id)sender 
{ 

UIButton *tappedButton = (UIButton*)sender; 

indexForCheckBox= [sender tag]; 


if([tappedButton.currentImage isEqual:[UIImage imageNamed:@"checkbox_unchecked.png"]]) 
{ 

    [sender setImage:[UIImage imageNamed: @"checkbox_checked.png"] forState:UIControlStateNormal]; 
    strinForCheckBox= [ApplicationDelegate.ArrayForSearchResults objectAtIndex:indexForCheckBox]; 
    [arrForCheckBox addObject:strinForCheckBox]; 
    NSLog(@"Sender Tag When Add %d", indexForCheckBox); 
    NSLog(@"Array Count Check Box %d",[arrForCheckBox count]); 

} 

else 
{ 

     [sender setImage:[UIImage imageNamed:@"checkbox_unchecked.png"]forState:UIControlStateNormal]; 
     [arrForCheckBox removeObjectAtIndex:indexForCheckBox]; 
     NSLog(@"Sender Tag After Remove %d", indexForCheckBox); 
     NSLog(@"Array Count Uncheck Box %d",[arrForCheckBox count]); 


    } 


} 
+0

本当に助けが必要なのか分かりません。可能であれば、あなたの質問にいくつかのコードを提供してください! – Haris

+0

@ハリス私は彼の質問を理解しています。 – vishiphone

+0

@Harisのおかげで、私はボタンクリックイベントのコードと、indexpathメソッドの行のtablevセルに投稿しました。私はボタンを動的に作成しています。 – user1376698

答えて

0

これはボタンのクリック方法で追加できます。

最初に設定したBoolの値は、1回のクリックではNo、2回目のクリックでは、配列のaddobjectプロパティと他のremoveobjectプロパティを使用して配列のインデックス値を最初にクリックします。

-(void)list 
{ 

if(isCheck==YES) 
{ 
    //add array object here 
    isCheck=NO; 
} 
else if(isCheck==NO) 
{ 
    //remove array object here 
    isCheck=YES; 
} 

} 
+0

返信のために私のコードを投稿しました... – user1376698

+0

... – user1376698

+0

あなたはdidselectrow tableviewメソッドで作成したオブジェクトのみを渡し、そのオブジェクトをここに渡します。 – vishiphone

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

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    if ([selectedRowsArray containsObject:[contentArray objectAtIndex:indexPath.row]) { 
     cell.imageView.image = [UIImage imageNamed:@"checked.png"]; 
    } 
    else { 
     cell.imageView.image = [UIImage imageNamed:@"unchecked.png"]; 
    } 
    UITapGestureRecogniser *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleChecking:) 
    [cell.imageView addGestureRecognizer:tap]; 
    [tap release]; 

    cell.textLabel.text = [contentArray objectAtIndex]; 
    return cell; 
} 

- (void) handleChecking:(UITapGestureRecognizer *)tapRecognizer { 
    CGPoint tapLocation = [tapRecognizer locationInView:self.tableView]; 
    NSIndexPath *tappedIndexPath = [self.tableView indexPathForRowAtPoint:tapLocation]; 

    if (selectedRowsArray containsObject:[contentArray objectAtIndex:tappedIndexPath.row]) { 
     [selectedRowsArray removeObject:[contentArray objectAtIndex:tappedIndexPath.row]]; 
    } 
    else { 
     [selectedRowsArray addObject:[contentArray objectAtIndex:tappedIndexPath.row]]; 
    } 
    [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:tappedIndexPath] withRowAnimation: UITableViewRowAnimationFade]; 
} 
0

私は別の方法を発見しました。コードは、私だけのコード下記のような便利なものとして、キー/値のペアで修飾した、@The Saadから抽出され、 -

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

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    if ([[selectedRowsArray objectAtIndex:indexPath.row] containsObject:@"YES"]) 
     cell.imageView.image = [UIImage imageNamed:@"checked.png"]; 
    else 
     cell.imageView.image = [UIImage imageNamed:@"unchecked.png"]; 

    UITapGestureRecogniser *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleChecking:) 
    [cell.imageView addGestureRecognizer:tap]; 
    [tap release]; 

    cell.textLabel.text = [contentArray objectAtIndex]; 
    return cell; 
} 

- (void) handleChecking:(UITapGestureRecognizer *)tapRecognizer { 
    CGPoint tapLocation = [tapRecognizer locationInView:self.tableView]; 
    NSIndexPath *tappedIndexPath = [self.tableView indexPathForRowAtPoint:tapLocation]; 

    if ([[selectedRowsArray objectAtIndex:tappedIndexPath.row] containsObject:@"YES"]) 
     [selectedRowsArray replaceObjectAtIndex:tappedIndexPath.row withObject:[NSSet setWithObject:@"NO"]]; 
    else 
     [selectedRowsArray replaceObjectAtIndex:tappedIndexPath.row withObject:[NSSet setWithObject:@"YES"]]; 

    [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:tappedIndexPath] withRowAnimation: UITableViewRowAnimationFade]; 
} 

あなたself.tableViewの行数のカウントと、以下のようselectedRowsArrayのために、オブジェクトを追加します。したがって、以下のようにブール値を追加する必要があります

for (int i = 0; i < tableViewRowCount; i++) { // tableViewRowCount would be your tableView's row count 
    .... 
    .... 
    .... 
    [selectedRowsArray addObject:[NSSet setWithObject:@"NO"]]; 
    .... 
    .... 
} 

乾杯!

更新

あなたはそれをoverkillingためNSMutableDictionaryのキー/値のペアを維持する必要はありません、更新されたコードを使用して。 NSSetは、これでより良い方法を提供します。

関連する問題