0

日付でいっぱいのテーブルビューがあります。私のセクションヘッダーは月の名前です。ここで私のテーブルビューを見ることができます。

私が欲しいのは、その瞬間の月のセクションにスクロールすることです。セクションヘッダーの設定には、このメソッドを使用します。

 id <NSFetchedResultsSectionInfo> theSection = [[self.fetchedResultsController sections] objectAtIndex:section];

        static NSArray *monthSymbols = nil;
        NSArray *dutchMonths = [[NSArray alloc]initWithObjects:@"Januari",@"Februari",@"Maart",@"April",@"Mei",@"Juni",@"Juli",@"Augustus",@"September",@"Oktober",@"November",@"December", nil];
        if (!monthSymbols) {
            NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
            [formatter setCalendar:[NSCalendar currentCalendar]];
            [formatter setMonthSymbols:dutchMonths];
            monthSymbols = [formatter monthSymbols];

        }
        NSLog(@"%@",monthSymbols);
        NSInteger numericSection = [[theSection name] integerValue];

        NSInteger year = numericSection / 1000;
        NSInteger month = numericSection - (year * 1000);

        NSString *titleString = [NSString stringWithFormat:@"%@", [monthSymbols objectAtIndex:month-1]];
        label.text = titleString;

私はこの方法を使わなければならないことをすでに知っています。

[sampleListTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:YES];

しかし、正しい行のインデックスパスを取得するにはどうすればよいですか?

何か助けはありますか?詳細が必要な場合。助けてください。

敬具。

4

1 に答える 1

0

セクション配列 (self.fetchedResultsController から) をループし、問題のオブジェクトから取得した月を現在の日付からの月と比較することで、インデックスを取得できるようです。一致する場合、indexPath は次のようになります。

NSIndexPath *path = [NSIndexath indexPathForRow:0 inSection:foundIndex];

また、メソッドが呼び出されるたびに作成されないように、dutchMonths 配列を静的にする必要があります。また、ARC を使用していない場合は、リークしています (リリース コードが掲載されていない場合を除きます)。一般的な経験則では、日付フォーマッタも静的にするか、何らかの方法でその 1 つのインスタンスを管理します。これはコストのかかる操作であるためです。このコードでは、 monthSymbols 配列を設定するためにのみ使用するため、一度しか作成されないことはわかっていますが、他のコードで同じフォーマッターを使用する必要がある場合は、それを書き直す必要があります。

これをすべて行うには、このメソッドのロジックを抽出し、次のような小さくて再利用可能なメソッドに配置する必要があります

- (NSInteger)monthFromSection:(id<NSFetchedResultsSectionInfo>)section;

次に、次のように記述できます。

NSIndexPath *path = nil;
NSInteger currentMonth = // Calculate month from date returned by [NSDate date]
NSArray *sections = [self.fetchedResultsController sections];
for (int i = 0; i < sections.count; i++)
{
    if (currentMonth = [self monthFromSection:[sections objectAtIndex:i]])
    {
        path = [NSIndexPath indexPathForRow:0 inSection:i];
        break;
    }
}
于 2012-10-30T16:37:02.890 に答える