3

UITableViewこれまで、データベースからコンテンツを入力して実装しました

sqliteデータベースから配列で取得することにより

storedContactsArray = [Sqlitefile selectAllContactsFromDB];

したがって、複数のセクション、セクション ヘッダーはなくstoredContactsArray.count、行数として返されます。

ここで、テーブル ビューに同じデータを入力する必要がありますが、Alphabetical セクションのデータ セットはアルファベット順に表示されます。

で試しました

alphabetsArray =[[NSMutableArray alloc]initWithObjects:@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z",nil];


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [alphabetsArray count];
}

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
      return alphabetsArray;
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
      return [alphabetsArray objectAtIndex:section];
}

次のように必要な

ただし、 n の場合、最初numberOfRowsInSectioに連絡先がないため失敗しますstoredContactsArray

エラーが発生します: -[__NSArrayM objectAtIndex:]: index 25 beyond bounds for empty array

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
  return [[storedContactsArray objectAtIndex:section] count]
}

フルリンクを使用するためのアドバイスがあれば教えてください。

4

1 に答える 1

17

要件を達成するには、最初にすべてのデータをアルファベット順にセクションに分ける必要があります。これは次のとおりです。

ここのセクションは可変ディクショナリで、すべてのデータをアルファベット順のセットとして取得します。

 //Inside ViewDidLoad Method

 sections = [[NSMutableDictionary alloc] init]; ///Global Object

 BOOL found;

for (NSString *temp in arrayYourData)
{        
    NSString *c = [temp substringToIndex:1];

    found = NO;

    for (NSString *str in [sections allKeys])
    {
        if ([str isEqualToString:c])
        {
            found = YES;
        }
    }

    if (!found)
    {     
        [sections setValue:[[NSMutableArray alloc] init] forKey:c];
    }
}
for (NSString *temp in arrayYourData)
{
    [[sections objectForKey:[temp substringToIndex:1]] addObject:temp];
}



-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [[sections allKeys]count];
}


-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [[sections valueForKey:[[[sections allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)] objectAtIndex:section]] count];
}


-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
      static NSString* CellIdentifier = @"Cell";
      UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if(cell == Nil)
     {
           cell  = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
     }
     NSString *titleText = [[sections valueForKey:[[[sections allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)] objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row];
     cell.textLabel.text = titleText;
     return cell;
 }

試してみてください私はそれを使用していますが、うまく機能していますそれがあなたを助けてくれることを願っています!!!

于 2012-10-31T13:11:01.527 に答える