2012-12-05 72 views
3

我想將Plist顯示爲UITableView。通過以下代碼,我可以顯示一個鍵值list of states。但我想顯示三個表的所有值。在UITableview中顯示Plist

- (id)readPlist:(NSString *)fileName 
{ 
NSData *plistData; 
NSString *error; 
NSPropertyListFormat format; 
id plist; 

NSString *localizedPath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"plist"]; 
plistData = [NSData dataWithContentsOfFile:localizedPath]; 

plist = [NSPropertyListSerialization propertyListFromData:plistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error]; 
if (!plist) { 
NSLog(@"Error reading plist from file '%s', error = '%s'", [localizedPath UTF8String],  [error UTF8String]); 

} 

return plist; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
// Return the number of rows in the section. 
return [[[self readPlist:@"sample"] objectForKey:@"ListOfStates"] 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] autorelease]; 
} 

cell.textLabel.text = [[[self readPlist:@"sample"] objectForKey:@"ListOfStates"] objectAtIndex:indexPath.row]; 

return cell;} 

我的輸出來,只有listofkeystates

enter the image 是它也可以與values

+0

標準電池你到底想?每個表格的值中有三個部分,還是三個表格的集合? – Zaphod

+0

如果您可以顯示readPlist的代碼,以及您當前獲得的輸出,將會有所幫助。 –

+0

@Zaphod對不起,沒有錯誤,但我只能顯示列表中只有selangor,terengganu,gfh,johor和melaka的列表的關鍵值 –

回答

2

顯示key名字只是嘗試在NSDictionaryNSArray獲取數據,然後使用它UITableView

NSString *file = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"plist"]; 
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:file]; 

和u SE tableValue與它的名字一樣波紋管......

NSArray *array = [dict objectForKey:@"ListOfStates"]; 
NSLog(@"%@", array); 

我希望這會幫助你..

4

也許用桌子部分...

-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView { 
    NSDictionary* dict = [self readPlist:@"sample"]; 
    return dict.allKeys.count; 
} 

-(NSString*) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
    NSDictionary* dict = [self readPlist:@"sample"]; 
    return [dict.allKeys objectAtIndex:section]; 
} 

-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    NSDictionary* dict = [self readPlist:@"sample"]; 
    NSString* key = [dict.allKeys objectAtIndex:section]; 
    return [[dict valueForKey:key] count]; 
} 

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

    NSDictionary* dict = [self readPlist:@"sample"]; 
    NSString* key = [dict.allKeys objectAtIndex:indexPath.section]; 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    cell.textLabel.text = [[dict objectForKey:key] objectAtIndex:indexPath.row]; 
    return cell; 
} 
+0

真的有用..謝謝男人! –

2

編輯:糾正了一些錯誤,錯字

這個想法

  1. 加載的plist在dictonary
  2. 可選:(!)對其進行排序
  3. 創建數據的陣列的每個部分
  4. 創建部分的陣列

然後執行以下事項

  1. viewDid加載 - >在字典中加載plist文件,創建一個數組的段和數據字典

  2. numberOfSectionsInTableView - >段的數量。在你的情況下鍵的數量

  3. numberOfRowsInSection - >每一部分的行數

  4. titleForHeaderInSection - 每個節>部分

  5. 的cellForRowAtIndexPath的標題 - >中的數據all row

  6. sectionIndexTitlesForTableView - >包含所有部分名稱的數組。在你的情況下,所有的按鍵

假設你有一個屬性叫做mySections和一個名爲myData的 屬性還假設你用故事板與回收標識「細胞」

@synthesize mySections 
    @synthesize myData   

    - (void)viewDidLoad 
    { 
     [super viewDidLoad]; 

     //LOADING THE PLIST FILE 

     //Create a string representing the file path 
     NSString *plistPath = [bundle pathForResource:@"yourFilename" ofType:@"plist"]; 

     //Load the file in a dictionnary 
     NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:plistPath]; 

     self.myData = dict; 

     //SORTING THE DICTIONARY  
     NSArray *dicoArray = [[self.myData allKeys] sortedArrayUsingComparator:^(id firstObject, id secondObject) { 
      return [((NSString *)firstObject) compare:((NSString *)secondObject) options: NSCaseInsensitiveSearch]; 
     }]; 

     self.mySections = dicoArray; 
    } 

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    { 
     //Return the number of sections. 
     return [self.mySections count]; 
    } 

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    { 
     // Return the number of rows in the section. 
     NSString *key = [self.mySections objectAtIndex:section]; 
     NSArray *dataInSection = [self.myData objectForKey:key]; 
     return [dataInSection count]; 
    } 

    -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
     NSString *key = [self.mySections objectAtIndex:section]; 
     return [NSString stringWithFormat:@"%@", key]; 
    } 

    -(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { 
     return self.mySections; 
    } 

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath 
{ 
    NSUInteger section = [indexPath section]; 
    NSUInteger row = [indexPath row]; 

    NSString *key = [self.mySections objectAtIndex:section]; 
    NSArray *dataForSection = [self.myData objectForKey:key]; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 

    cell.textLabel.text = [dataForSection objectAtIndex:row]; 

    return cell; 
} 
+0

感謝男人!!!!! –

+0

:-)希望它有幫助。也許有一些錯字錯誤。如果你有問題就問。 – HpTerm

+0

你的代碼是不是爲我工作... :(第一次我試圖在Plist代碼..不知道你的代碼...什麼是mycode? –