假設我的UITableView由一個X數量的NSDates數組提供。我怎樣才能對它們進行排序,以便UITableView模仿iPhone上的Phone應用程序,但這樣做是爲了讓UITableView中的每一天有一段由數組中的日期(或多個日期)表示的部分?如何複製iPhone最近呼叫通話時間標籤
編輯:突破!爲了弄清楚有多少部分需要,我用這個:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
NSArray* array = [[NSUserDefaults standardUserDefaults] objectForKey:@"mapSaveDataKey"];
NSMutableArray* dateStrings = [[NSMutableArray alloc] init];
for(NSArray* innerArray in array)
[dateStrings addObject:[dateFormatter stringFromDate:[innerArray objectAtIndex:13]]];
NSArray *cleanedArray = [[NSSet setWithArray:dateStrings] allObjects];
return [cleanedArray count];
}
通過採取這些格式的使用NSDateFormatter NSDates使用這些設置dateStrings的數組:
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setDoesRelativeDateFormatting:YES];
我可以得到一個列表不管時間如何,來自同一天的每個字符串都是相同的。然後,我可以使用NSSet獲取不包含重複項的相同字符串的數組,並且該數組的數量是我需要的部分的數量。大。
現在到了困難的部分:我如何獲取該字符串數組(或原始NSDates數組)並找出每天有多少重複數據,並使用該信息來決定需要多少行在UITableView的每個部分?爲了讓事情變得更加困難,他們需要從最近的到最老的。 (還有一個問題是確定哪些單元需要在哪個部分進行,但可以在以後找到)
解決了,這得益於Ole Begemann提供的雄辯解決方案。 +100你 我用這個循環弄清楚當我陣列我要開始爲每個部分:
int offset = 0;
for(int idx = 0; idx < [tableViewOutlet numberOfSections]; idx++) {
if(idx == indexPath.section)
break;
offset += [tableViewOutlet numberOfRowsInSection:idx];
}
這裏太晚了,我不想進入這個。但爲了讓你開始看看[日曆計算](http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/DatesAndTimes/Articles/dtCalendricalCalculations.html)文檔。通過使用秒來計算日期是passè。一旦你能夠開始將你的數組分成日期,你會發現處理這個更容易。 – Abizern
感謝您的鏈接,它幫助了很多!請參閱我的編輯... –