2017-07-05 12 views
1

Mulitple Selection List こんにちは、複数のUITableViewCellを選択して、もう一度タップして選択解除したかったのです。そしてcellForRowAtIndexPath:後選択したボタンをもう一度タップして複数のUITableviewセルを選択解除する方法

didSelectRowAtIndexPathの私のコードです

-(UITableViewCell *)tableView:(UITableView *)tableView 
    cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
NSString *cellIdentifier = @"serviceTypeSelectionCell"; 
ServiceTypeSelectionTableViewCell *serviceTypeCell = (ServiceTypeSelectionTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
if (serviceTypeCell == nil) 
{ 
    serviceTypeCell = [[ServiceTypeSelectionTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
} 
//serviceDetailsCell.noOfQuantityTextField.tag = indexPath.row; 
serviceTypeCell.serviceTypeNameLabel.text = [NSString stringWithFormat:@"%@",arrayOfServiceTypes[indexPath.row][@"sub_cat_name"]]; 

if([[arrayOfSelectedBoolValues objectAtIndex:indexPath.row] boolValue]) 
{ 
    serviceTypeCell.serviceTypeImageView.image = [UIImage imageNamed:@"cancellation_reason_correct_icon"]; 
} 
else { 
    serviceTypeCell.serviceTypeImageView.image = [UIImage imageNamed:@"cancellation_reason_unselect_icon"]; 
} 
return serviceTypeCell; 
} 

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
for (int i = 0; i < [arrayOfServiceTypes count]; i++)//Make all Rows To UnSelected 
{ 
    [arrayOfSelectedBoolValues replaceObjectAtIndex:i withObject:[NSNumber numberWithBool:NO]]; 
} 
[arrayOfSelectedBoolValues addObjectsFromArray:sele:indexPath.row]; 
if(arrayOfSelectedBoolValues!=nil) 
{ 
    [arrayOfSelectedBoolValues replaceObjectAtIndex:indexPath.row withObject:[NSNumber numberWithBool:YES]]; 
} 

    [arrayOfSelectedBoolValues replaceObjectAtIndex:indexPath.row withObject:[NSNumber numberWithBool:YES]]; 
{ 
[self.tableView reloadData]; 
[self showOrHideAddButton]; 
} 

私は、単一の選択と上記のUITableViewの非選択の既存のコードを持っています。上記のコードをすべて無効にして、この部分をdidSelectRowAtIndexPath:に保存するだけで、複数の選択を行うことができます。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
[arrayOfSelectedBoolValues replaceObjectAtIndex:indexPath.row withObject:[NSNumber numberWithBool:YES]]; 
    [self.tableView reloadData]; 
    [self showOrHideAddButton]; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.doneButton.hidden = YES; 
    arrayOfSelectedBoolValues = [[NSMutableArray alloc]init]; 

    for (int i = 0; i < [arrayOfServiceTypes count]; i++) 
    { 
     // [arrayOfexpOrCollBoolValues addObject:[NSNumber numberWithBool:NO]]; 
     [arrayOfSelectedBoolValues addObject:[NSNumber numberWithBool:NO]]; 
    } 
    [self sendServiceToGetServiceTypes]; 
} 

ので、誰もが複数のtableviewcellsを選択して、前にもう一度タップすることで任意のセルを選択解除し、サーバーに選択された値を送信するために自分のコードに応じて構造化されたコードを投稿してください。

ありがとうございました。

+0

を追跡し、可変配列である中。これはあなたを助けるhttps://stackoverflow.com/questions/6302732/tableview-with-checkbox –

+0

@ZaheerUdeenこれは私が欲しかったものです。ありがとう、私は一見を持っています。 – Fido

答えて

0

のようにdidSelectRowAtIndexPathを変更してみてください。
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

{ 
    if (_selectedIndexes == nil) { 
     self.selectedIndexes = [NSMutableArray array]; 
    } 
    if ([_selectedIndexes containsObject:indexPath]) { 
     [_selectedIndexes removeObject:indexPath]; 

    } else { 
     [_selectedIndexes addObject:indexPath]; 

    } 
    [self.tableView reloadData]; 
     [self showOrHideAddButton]; 

    } 

そして、ここで

if([_selectedIndexes containsObject:indexPath]) 
    { 
     serviceTypeCell.serviceTypeImageView.image = [UIImage imageNamed:@"cancellation_reason_correct_icon"]; 
    } 
    else { 
     serviceTypeCell.serviceTypeImageView.image = [UIImage imageNamed:@"cancellation_reason_unselect_icon"]; 
    } 

selectedIndexesようserviceTypeImageView画像を変更するためのコードを変更cellForRowAtIndexPath試してみるあなたは、このいずれかを確認することができ、選択しindexPaths

@property(nonatomic, strong) NSMutableArray *selectedIndexes; 
0

あなたはこの方法で実行する必要があります。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
/// first run a loop for deselect all data 
//Make all Rows To UnSelected 
for (int i = 0; i < [arrayOfServiceTypes count]; i++) 
{ 
    [arrayOfSelectedBoolValues replaceObjectAtIndex:i withObject:[NSNumber numberWithBool:NO]]; 

} 

Now which one you have selected you need to do like this: 

[arrayOfSelectedBoolValues replaceObjectAtIndex:indexPath.row withObject:[NSNumber numberWithBool:YES]]; 

[self.tableView reloadData]; 

} 

私はそれはあなたの問題を助けることを願っています。

+0

これは既存のコードと同じ方法です。それは単一の選択だけを処理し、他のオプションを選択したい場合は、前の選択を解除し、もう1つを選択します。 – Fido

+0

これは私が望んでいない。私が欲しいのは、最初に複数のセルを選択し、再びタップして選択したテーブルセルを選択解除することです。 – Fido

+0

私はしばらくお待ちください、私は編集し、あなたに最高を見せます –

0

選択した行の配列を維持する必要があります。これは、行を選択するか、または行の選択を解除する(配列に既に存在する場合)ためです。

スウィフト3コード:

var selectedArray : [IndexPath] = [IndexPath]() 

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    let myCell = tableView.cellForRow(at: indexPath) as! TableCell 

    if(!selectedArray.contains(indexPath)) 
    { 
     selectedArray.append(indexPath) 
     // Change cell image for selected if needed here. 
    } 
    else 
    { 
     // remove from array here if required 
     // Change cell image for un selected if needed here. 
    } 
} 

にObjCコード: - selectedArray = [[NSMutableArray alloc]init];

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

. 
. 
. 
if(![selectedArray containsObject:indexPath]) 
{ 
    [selectedArray addObject:indexPath]; 
    // Change cell image for selected if needed here. 
} 
else 
{ 
    [selectedArray removeObject:indexPath]; 
    // remove from array here if required 
    // Change cell image for un selected if needed here. 
} 
. 
. 
. 
} 

(インターフェイスに).hファイルにselectedArrayを宣言し、そのようviewDidLoadでそれを初期化し、このようになります

+0

こんにちはアブドル私に客観的な正確なコードを提供できますか? – Fido

+0

あなたが書いたのと同じように私は次の方法を使いました。まだそれは働いていない。 [tableView deselectRowAtIndexPath:indexPath animated:YES]; ([arrayOfSelectedBoolValues containsObject:indexPath])であれば{ [arrayOfSelectedBoolValues replaceObjectAtIndex:indexPath withObject:のNSNumber numberWithBool:NO]。 } else { [arrayOfSelectedBoolValues replaceObjectAtIndex:indexPath withObject:[NSNumber numberWithBool:YES]]; } – Fido

関連する問題