0

セクション 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;
    }
4

1 に答える 1