2013-03-12 189 views
0

我想要什麼:在表格視圖中顯示一些數據列表。帶空單元格的Tableview

通過創建不同的對象將數據存儲在單個數組中。因此,對於每個對象,數組的大小都不相同。所以我的問題是顯示數據,而不是完全填充表格單元格,一些單元格留空。它看起來不太好。

任何人都可以解釋如何得到一個表視圖沒有任何額外的空單元格?

這是我如何安排數據:

Recipe *recipe1 = [Recipe new]; 


recipe1.ingredients = [NSArray arrayWithObjects:@"1. Fish - 500 g .",@"2. Onion (Big) - 2 nos (Chopped)",@"3. Garlic (Chopped) - 3 flakes",@"4. Green chillies - 2 nos (Chopped)",@"5. Chilly powder - 3/4 tbsp ",@"6. Coriander powder - 1/2 tsp ",nil]; 


Recipe *recipe2 = [Recipe new]; 

recipe2.ingredients = [NSArray arrayWithObjects:@"1. fish - 300 gm",@"2. Tomato(medium) - 1 no",@"3. Garlic - 10 gm",@"4. Coconut powder - 10 gm",@"5. Curry leaves - A few",@"6. Salt - As reqd",@"7. Onions(medium) - 2 nos(chopped)",@"8. Oil - 1 - 2 tbsp",nil]; 

我想說明的tableview取決於哪個菜被選中裏面這些成分列表。

這裏是我的數據源方法

- (NSInteger)numberOfSectionsInTableView:(UITableView *)aTableView { 
    // Return the number of sections. 
    return 1; 
} 


- (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section { 
    // Return the number of rows in the section. 
    return [data count]; 
} 


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

    static NSString *CellIdentifier = @"CellIdentifier"; 

    // Dequeue or create a cell of the appropriate type. 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
     cell.accessoryType = UITableViewCellAccessoryNone; 
    } 

    [cell.textLabel setFont:[UIFont fontWithName:@"Bold" size:20]]; 

    // Configure the cell. 
    cell.textLabel.text =[data objectAtIndex:indexPath.row]; 
    return cell; 
} 
+0

將ü張貼的TableView的數據源方法? – 2013-03-14 09:48:38

回答

0

cellForRowAtIndexPath方法嘗試使用以下

在第二個配方選擇:

cell.textLabel.text = [recipe1.ingredients objectAtIndex:indexPath.row]; 

在第二個配方選擇:

cell.textLabel.text = [recipe2.ingredients objectAtIndex:indexPath.row]; 
0

修改以下功能:對(MAC OS)

- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView 
    { 
     if (First Recipe) 
    return [recipe1.ingredients count]; 

     else if (Second Recipe) 
    return [recipe2.ingredients count]; 

    } 

或爲iOS:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    { 
     if (First Recipe) 
      return [recipe1.ingredients count]; 

       else if (Second Recipe) 
      return [recipe2.ingredients count]; 
    } 

之後一定要重新加載表視圖,一旦選擇完成。 願這能幫助你。

+0

有沒有這樣的方法名爲numberOfRowsInTableView – haritha 2013-03-12 09:47:03

+0

檢查並學習:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Protocols/NSTableDataSource_Protocol/Reference/Reference.html – 2013-03-12 10:04:34

+0

我已更新答案..現在檢查。 – 2013-03-13 06:23:19

0

你想要做的是:

你將有陣全配方的對象&這將是你的tableview的數據源。 &當你點擊任何一個食譜(名稱)時,它會推送到另一個視圖控制器,在tableview(列表)中給出該食譜所需的配料列表。

爲此,首先創建一個帶有recipeArray(配方對象)的主視圖控制器作爲數據源&列出帶有配方名稱的表視圖中的配方。當你選擇一個配方(在didSelectRowAtIndexPath中被調用)時,推送到新的視圖控制器,所選配方對象&填充下一個tableview控制器中的成分列表。

0

在viewDidLoad中添加

tableview.tableFooterView = [[UIView alloc] init]; 

1號線,並添加下面這個方法,所以你不會看到任何額外的細胞,其是空的

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Remove seperator inset 
    if ([cell respondsToSelector:@selector(setSeparatorInset:)]) { 
     [cell setSeparatorInset:UIEdgeInsetsZero]; 
    } 

    // Prevent the cell from inheriting the Table View's margin settings 
    if ([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) { 
     [cell setPreservesSuperviewLayoutMargins:NO]; 
    } 

    // Explictly set your cell's layout margins 
    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) { 
     [cell setLayoutMargins:UIEdgeInsetsZero]; 
    } 
}