0

NSArrayキーのリストを含む があり、この配列は .plist から取得されます。

現時点では、この配列を aUITableViewに書き込みますが、これはソートおよびセクション化されていません。UITableViewこの配列をソートし、この配列の各文字の最初の文字で始まるセクションをこれに入れたいと考えています。

例: Sectionname: "A" Celltext: "Ahorn"

私はあなたがそれを得る願っています。私のコードは今:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

NSArray * sections = [temp allValues];

NSUInteger *tablesections = [sections count];

return tablesections;


}

と:

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

    NSArray * values = [temp allValues];

[EingabeListe addObjectsFromArray:values];

char szDecryptetKey[256];
sleep(0.5);


NSString *cellValue = [values objectAtIndex:indexPath.row];
const char *cString = [cellValue cStringUsingEncoding:NSASCIIStringEncoding];

DecryptKey(cString, szDecryptetKey);

NSString *pnssDecryptetKey = [NSString stringWithFormat:@"%s",szDecryptetKey];


cell.textLabel.font = [UIFont systemFontOfSize:11.0];
cell.textLabel.text = pnssDecryptetKey;

return cell;

ありがとう

4

4 に答える 4

1

おそらく、これを単一の配列に残すことはありません。NSDictionaryアルファベットの各文字が、アルファベットの最初の文字 (およびセクション) ごとにバケツである場所に入れます。次に、1 つのセクションの内容を取得することは、必要な最初の文字を辞書で検索するのと同じくらい簡単です。

配列をアルファベット順にソートすることから始めます。これは何度も聞かれましたが、これが1つの答えです

次に、配列を繰り返し処理し、最初の文字に基づいて辞書に追加します。辞書の各「値」は、単一の項目ではなく配列になります。したがって、最初に文字 (「g」など) に到達するときは、辞書に「g」キーを作成し、値として NSMutable 配列を追加します。

補足として、これは宿題のように聞こえたので、コードを追加しませんでした (もちろん、間違っている可能性もあります)。私はあなたを助けたいと思っていますが、あなたのためにそれをしたくはありません. とはいえ、不明な点がある場合、またはさらにサポートが必要な場合は、喜んで提供いたします)。

于 2013-03-25T12:32:14.597 に答える
0

私は通常、この種のアプリには無料の Sensible TableView フレームワークを使用しています。文字通り、配列をフレームワークに投げるだけで、すべてのセクションが自動的に並べ替えられて作成されます。実装には数分かかるはずなので、確認することをお勧めします。

于 2013-03-25T19:00:34.360 に答える
0

そのためには、コードを変更する必要があります。説明します。

手順:

  1. アルファベット配列を初期化し、アルファベットに基づいて使用ソース配列をフィルター処理します。
  2. 現在、dataSource ディクショナリには、アルファベットでフィルタリングされたソース データの配列が含まれています。
  3. これで、セクションの数はノーになります。ディクショナリ内の配列の。
  4. データソース ディクショナリから各セクションのデータ ソース配列を読み込みます。

アルファベット配列とデータソース配列を初期化します。

  alphabet = [[NSArray 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];
                        
  dataSource = [[NSMutableDictionary alloc]initWithCapacity:[alphabet count]];
                    
  sourceArray = [NSArray arrayWithObjects:@"Azz",@"ax",@"aje",@"B",@"C",@"Ca",@"D",@"DD",@"E",@"EE",@"F",@"G",@"F", nil];
   

ソース配列をフィルター処理し、キー値をアルファベットとして辞書にデータを追加します。

for(int i = 0; i<[alphabet count]; i ++)
 {
 NSArray *filteredArray = [sourceArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF BEGINSWITH[C] %@", [alphabet objectAtIndex:i]]];
  if([filteredArray count]>0)
   dataSource setObject:[filteredArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)] forKey:[alphabet objectAtIndex:i]]; // Dictionary containing sorted array of data with key as alphabets
                    
}

また、セクション数と行デリゲート メソッドをカスタマイズする必要があります。サンプル コードを参照してください。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    
    // Return the number of sections.
    return [[dataSource allKeys] count];
}
 
      - (NSString *)tableView:(UITableView *)aTableView titleForHeaderInSection:(NSInteger)section 
{
                return [[dataSource allKeys] objectAtIndex:section]; 
}

ソースコード全体:

     - (void)viewDidLoad
        {
            [super viewDidLoad];
         
            
            alphabet = [[NSArray 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];
            
            dataSource = [[NSMutableDictionary alloc]initWithCapacity:[alphabet count]];
            
            sourceArray = [NSArray arrayWithObjects:@"Azz",@"ax",@"aje",@"B",@"C",@"Ca",@"D",@"DD",@"E",@"EE",@"F",@"G",@"F", nil];
            
            for(int i = 0; i<[alphabet count]; i ++)
            {
                NSArray *filteredArray = [sourceArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF BEGINSWITH[C] %@", [alphabet objectAtIndex:i]]];
                if([filteredArray count]>0)
                    [dataSource setObject:[filteredArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)] forKey:[alphabet objectAtIndex:i]]; // Dictionary containing sorted array of data with key as alphabets
                
            }
            NSLog(@"Filtered Array %@", dataSource);
        
            
        }

        
        #pragma mark - Table view data source
        
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    
    // Return the number of sections.
    return [[dataSource allKeys] count];
}
 
      - (NSString *)tableView:(UITableView *)aTableView titleForHeaderInSection:(NSInteger)section 
{
                return [[dataSource allKeys] objectAtIndex:section]; 
}

        
        - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
        {
            
        
            return [[dataSource objectForKey:[[dataSource allKeys] objectAtIndex:section]] count];
            
        }
        
        - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
        {
            
            return 20;
        }
        - (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath
        {
            return NO;
        }
        
        
        - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
        {
            
            originalSource = [dataSource objectForKey:[[dataSource allKeys] objectAtIndex:indexPath.section]];
            
            static NSString *CellIdentifier = @"Cell";
            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
            if (cell == nil) {
                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
            }
            cell.textLabel.text = [NSString stringWithFormat:@"%@",[originalSource objectAtIndex:indexPath.row]];
            return cell;
            
        }
        
        
        #pragma mark - Table view delegate
        
        - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
        {
        
        }
        
        

出力は次のようになります。

ここに画像の説明を入力

于 2013-03-25T13:41:38.727 に答える
0

こんにちはありがとう、それはかなりうまくいきます。しかし、.plist の最初の文字しか表示されません。

間違っているのは次の行だと思います。

NSString *cellValue = [values objectAtIndex:indexPath.row];

しかし、ここに私のコードがあります:

[super viewDidLoad];
self.EingabeListe = [NSMutableArray arrayWithCapacity:20];
NSIndexPath *indexPath = 0;


alphabet = [[NSArray 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",@"123",nil];

datasource = [[NSMutableDictionary alloc]initWithCapacity:[alphabet count]];

int m = 1;
int n = 0;
NSArray * values = [temp allValues];
int c = [values count];

//

char szDecryptetKey[256];
sleep(0.5);


while (m != 0) {
    if ( n == c){
        m = 0;
    }else{
        NSString *cellValue = [values objectAtIndex:indexPath.row];
        const char *cString = [cellValue cStringUsingEncoding:NSASCIIStringEncoding];



        NSString *pnssDecryptetKey = [NSString stringWithFormat:@"%s",szDecryptetKey];

        [EingabeListe addObject:pnssDecryptetKey];
        pnssDecryptetKey = 0;
    }
    n++;

}

for(int i = 0; i<[alphabet count]; i ++)
{
    NSArray *filteredArray = [EingabeListe filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF BEGINSWITH[C] %@", [alphabet objectAtIndex:i]]];
    if([filteredArray count]>0)
        [datasource setObject:[filteredArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)] forKey:[alphabet objectAtIndex:i]]; // Dictionary containing sorted array of data with key as alphabets

}
}

私の .plist には、次のようないくつかのテスト キーと値があります。

値 キー sqq hi zzz eg 卵 bb

しかし、my.plistでは次のようにしか見えません: sqq sqq sqq

なぜ?

于 2013-03-26T09:14:01.070 に答える