2013-03-11 3 views
3

테이블 (tableview1)에서 선택된 행의 수를 세는 다음 코드가 있습니다.UITableView에서 선택된 행의 수를 계산하십시오.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath]; 
    if (!cell) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"]; 
    } 
    int count = 0; 
    selectedindex1 = indexPath.row; 
    for (NSIndexPath *indexPath in tableview1.indexPathsForSelectedRows) { 
     count = count + 1; 
    } 
    rowcount = count; 
} 

여기서, selectedindex1 및 rowcount는 정수 변수입니다.

이 코드는 사용자가 이미 선택된 행을 선택하지 않는다고 가정하면 작동합니다. 이러한 작업을 수행하면 didSelectRowAtIndexPath 메소드가 트리거되지 않으므로 응용 프로그램에서 선택한 행을 올바르게 말할 수 없습니다. 선택한 행 수를 계산하는 더 좋은 방법이 있습니까?

도움 주셔서 감사합니다.

+0

행이 이미 선택되어있는 경우 다시 선택할 수 없습니까? 가능한 경우에도 선택한 행의 수에는 영향을 미치지 않습니다. 행 개수 변수로 정확히 무엇을하려합니까? – paulmelnikow

+0

언급하지 못했지만 '다중 선택'이 활성화되었습니다. 죄송합니다 ... –

+0

충분히 명확했습니다. 나는 당신이 선택뿐만 아니라 선택 취소에 대해서 행동하기를 원한다는 것을 이해하지 못했습니다. 어떻게 행 개수 변수를 사용합니까? 왜 콘센트를 사용하여 tableview에 대한 참조를 유지하고 카운트가 필요할 때 코드에서'-indexPathsForSelectedRows'를 호출합니까? – paulmelnikow

답변

3

indexPath의 실행 배열을 선택하는 것이 좋습니다. 그러면 같은 패스워드를 두 번 선택하는 것에 대해 걱정할 필요가 없습니다.

가있는 viewDidLoad

의 배열 didSelectRowAtIndexPath에서 다음
NSMutableArray *yourSelectedRowsArray = [[NSMutableArray alloc]init]; 

- 그리고는 ... 이런 식으로 뭔가를 -Initialize 수행

if(![yourSelectedRowsArray containsObject:indexPath]) 
{ 
    [yourSelectedRowsArray addObject:indexPath]; 
} 

NSLog(@"the number of selected rows is %d",yourSelectedRowsArray.count); 

- 그리고 같은 didDeselectRowAtIndexPath..do 무언가 :

if([yourSelectedRowsArray containsObject:indexPath]) 
    { 
     [yourSelectedRowsArray removeObject:indexPath]; 
    } 

NSLog(@"the number of selected rows now is %d",yourSelectedRowsArray.count); 

그런 다음 사용하려는 모든 위치의 배열 수에 액세스하면 n 선택된 행 수.

+0

UITableView는 사용자를 위해 선택된 색인 경로를 추적하기 때문에 무의미한 것처럼 보입니다. – paulmelnikow

+0

당신은 더 나은 해결책을 가지고 있습니다.하지만 downvote에 감사드립니다. –

+0

감사합니다. 나는 deselect 메서드가 있다는 것도 몰랐다. –

6

는 나는이처럼 간단하다고 생각 :

[[tableView indexPathsForSelectedRows] count] 

그럼 다시, 그 코드가 무엇을하는지 정확히 :

int count = 0; 
for (NSIndexPath *indexPath in tableview1.indexPathsForSelectedRows) { 
    count = count + 1; 
} 
rowcount = count; 

이 오류가 발생하는 것을 정확히 무엇입니까?

+0

고마워. 선의 수를 줄였습니다. 그러나 같은 문제가 계속 발생합니다. –

+1

indexPathsForSelectedRows를 의미합니까? –

3

오케이. 그것은 다음과 같이 간단합니다.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    rowcount = [[tableView indexPathsForSelectedRows] count]; 
} 

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { 
    rowcount = [[tableView indexPathsForSelectedRows] count]; 
} 
관련 문제