セクション tableview でアプリを作成しています。セクション ヘッダーは keyArray を介して地区を表示します。テーブルビューの行には、名前、住所、距離などのすべての情報が表示されます。以下のコードで作ることができます。
では、テーブルビューで昇順でソートしてみます。「cellForRowAtIndexPath」メソッドでソートするにはどうすればよいですか?
私の 2 番目の考えは、cellForRowAtIndexPath メソッドの外側に NSArray を作成することです。1 つは、plist データを読み込んで距離を計算することです。次に、NSSortDescriptor で並べ替えます。この方法に行った場合、セクション テーブルビューに正しく入力する方法がわかりません。
誰かが私に何かアイデアや提案をしてもらえますか?
キー配列では、以下のコードを使用して ViewDidLoad で作成し、セクション ヘッダーに配置します。
//location info draw from plist
NSArray*tempArray=[[NSArray alloc]init];
tempArray=[dataDictionary allKeys];
self.keyArray=[tempArray mutableCopy];
cellForRowAtIndexPath では、ターゲット位置とユーザー位置の間の距離を計算します。次に、すべての情報をテーブル ビューの行に表示します。
NSString*sectionHeader=[keyArray objectAtIndex:indexPath.section];
NSArray*sectionHeaderArray=[dataDictionary objectForKey:sectionHeader];
NSDictionary*targetLat=[sectionHeaderArray objectAtIndex:indexPath.row];
NSDictionary*targetLong=[sectionHeaderArray objectAtIndex:indexPath.row];
//location info draw from plist
CLLocation *targetLocation = [[CLLocation alloc] initWithLatitude:[[targetLat objectForKey:@"latitude"] floatValue] longitude:[[targetLong objectForKey:@"longitude"] floatValue]];
double distance = [self.myLocation distanceFromLocation:targetLocation]/1000;
UITableViewCell*cell=[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell==nil) {
cell=[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitlereuseIdentifier:CellIdentifier] autorelease];
}
UILabel*nameLabel=(UILabel*)[cell viewWithTag:100];
UILabel*addLabel=(UILabel*)[cell viewWithTag:101];
UILabel*latLabel1=(UILabel*)[cell viewWithTag:102];
UILabel*longLabel1=(UILabel*)[cell viewWithTag:103];
UILabel*disLabel=(UILabel*)[cell viewWithTag:106];
NSDictionary*name=[sectionHeaderArray objectAtIndex:indexPath.row];
NSDictionary*address=[sectionHeaderArray objectAtIndex:indexPath.row];
nameLabel.text=[name objectForKey:@"name"];
addrLabel.text=[address objectForKey:@"address"];
latLabel1.text=[NSString stringWithFormat:@"%f",self.myLocation.coordinate.latitude];
longLabel1.text=[NSString stringWithFormat:@"%f",self.myLocation.coordinate.longitude];
disLabel.text=[NSString stringWithFormat:@"%0.2f km",distance];
return cell;
}