2012-05-08 162 views
0

我有我在我的每個對象的屬性的一個UItable正在填充對象的數組是一個YES/NO的值使用 -xcode中的UITableView

IM(的UITableViewCell *)的tableView:(UITableView的*)的tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {填充我的表如下。

我的代碼爲數組中的每個對象創建一個表條目。我想只使用數組中具有「顯示」屬性設置爲YES的對象來填充表格?我該怎麼做呢?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
static NSString *cellidentifier = @"customcell"; 
customcell *cell = (customcell *)[tableView dequeueReusableCellWithIdentifier: 
            cellidentifier]; 

my_details *myObj = [appDelegate.myArray objectAtIndex:indexPath.row]; 

// UITableViewCell cell needs creating for this UITableView row. 
if (cell == nil) 

{ 
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"customcell" owner:self options:nil]; 

    for (id currentObject in topLevelObjects) { 
     if ([currentObject isKindOfClass:[customcell class]]) { 
      cell = (customcell *) currentObject; 
      break; 
     } 
    } 
} 


    cell.line1.text = myObj.line1; 
    cell.line2.text = myObj.line2; 
    cell.line3.text = myObj.line3; 


return cell; 
} 

回答

0

這是一個好主意,試圖過濾對象,然後將它們發送到表中顯示。

您可以使用NSPredicate過濾對象數組,並在對象更改狀態時將display屬性設置爲yes,重新過濾數組並將其傳遞給tableview。

NSPredicate *testForTrue = [NSPredicate predicateWithFormat:@"display == YES"]; 
NSArray *filteredArray = [myObjectsArray filteredArrayUsingPredicate:testForTrue]; 

獲得filteredArray後,您需要將它傳遞給tableView並告訴它重新加載它的數據以便刷新。

0

As @Sorin表示您必須過濾您的表格。這可以在插入表格之前或插入過程中完成。哪一個是品味的問題(和準則,你通常遵循編程)

一)前 擁有所有數據 - >過濾器 - >已減少集 - >顯示減小的表

b)在 有所有的數據 - >計數#items - >引入行 - >顯示錶 對於您必須適應numberOfRowsInSection

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    counter=0; 
    for each in table 
    if value = YES counter++ 
    return counter; 
} 

在你現在必須跟蹤下一行到的cellForRowAtIndexPath(僞代碼!)通過全局變量插入:(僞代碼!)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell; 
    static NSString *CellIdentifier = @"Cell"; 
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    rowcounter++; 
    cell.textLabel.text=[selectionTableArray objectAtIndex:rowcounter]; 
    return cell; 
}