开发者

Load cell selectively in TableView

开发者 https://www.devze.com 2023-04-10 11:53 出处:网络
I need to retu开发者_开发问答rn cell in tableView:cellForRowAtIndexPath: only when some condition is true,for example:

I need to retu开发者_开发问答rn cell in tableView:cellForRowAtIndexPath: only when some condition is true,for example:

if (condition == true)
return nil;
else
return cell;

Returning nil gives me an error.


You'll need to do a little more to conditionally have a cell in a UITableView.

Let's assume you have 3 cells, and the first one is conditional. The first thing you need to do make your table have either 2 or 3 cells based on this condition:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if(condition) {
        return 3;
    } else {
        return 2;
    }
}

Next you can return the actual cell.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if(condition) {
        if(indexPath.row == 0) {
            //create and return conditional cell
        } else {
            //create and return normal cell
        }
    } else {
        //create and return normal cell
    }
}

And voila!

PS: (This is assuming everything is done in a single section. If you need to break that out into multiple sections we can get into that as well).


This is because you cannot have blank spaces in your UITableView, that is not allowed, you must at least return an empty cell. What are you trying to do?

The error presents when the TableView tries to retrieve the next cell and gets nil, it has to get the next cell no matter what.


Depending on exactly what you are intending to do here could you not do perform the conditional test before making a call to tableview:cellForRowAtIndexPath:

EG

if( someCondition )
{
    [self.tableview cellForRowAtIndexPath:indexPath]
}

Or if your out come is to only display the table cells that meet a certain condition the I suggest you create a function that would copy those elements from your tableview data into an NSArray that you would use to display the desired/conditional table data.

IE

-(void)composeVisibleTableData
{
    [m_visibleTableData removeAllObjects];
    for( NSObject* dataObject in m_tableDataArray )
    {
       if( someCondition )//dataObject meetsCondition
       {
           m_visibleTableData addObject:dataObject];
       }
    }

}

Then in your UITableDelegate functions for numberOfRowsInSection: and tableview:cellForRowAtIndexPath: reference m_visibleTableData as the UITableView Data Source.


You should check condition when Cell's datasource is set :)

and Filter your data with condition.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号