I have UICollectionView and I would like to put a another Header as sample below (dark blue color).
In numberOfSectionsInCollectionView, I able to get the dynamic header 1 & 2 and CollectionView Cell if I use distinctNames.count. and return [groups[section][#"infos"] count]; in numberOfItemsInSection.
My question is, how can I add in extra header (something like static header as below) / cell in numberOfSectionsInCollectionView / numberOfItemsInSection if I have another section and cell to add in?
Can I use return distinctNames.count + 1; for additional header? And how can I set in numberOfSectionsInCollectionView?
Please help. Thank you.
- (NSInteger) numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return distinctNames.count + 1;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
if (section == 0) {
return 1;
}
}
return [groups[section][#"infos"] count];
}
Related
I'm trying to make a UITableView present a determined number of rows for a section, but even when I verify that its data source is returning x number of rows for numberOfRowsInSection, the table view shows x-1.
The exception to this unexpected behavior is if the numberOfRowsInSection is less than 3.
I've even put a breakpoint in cellForRowAtIndexPath and I confirmed it's being called for the row that is not appearing.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (section == SectionNumber_One) {
return 6;
} else {
return self.numberOfProjectRows; // This returns x, but x-1 rows are being shown
}
}
For example, if self.numberOfProjectRows is 5, only 4 rows are shown for the second section.
If I increase it manually to 6, it shows 5 rows but the data that should be in the 5th position, isn't there.
It doesn't seem to be related to screen size as I tested it on an iPad with same results.
Why is this happening? Is there some other possible modifier of the number of rows in a section?
I'm attaching an screenshot if it's of any help.
EDIT - Here are my delegate methods:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// Cell with reuse identifier setup
if (section == SectionNumber_One) {
// cell setup for section one that's showing up ok
} else if (section == SectionNumber_Two) {
UITextField *projectField = cell.projectTextField;
if ([self.userProjectKeys count] > row) {
projectField.text = self.availableProjects[self.userProjectKeys[row]];
}
}
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Hide the password row for existing users
if (indexPath.row == FieldTag_Password && ![self.user.key vol_isStringEmpty]) {
return 0.0f;
} else {
return UITableViewAutomaticDimension;
}
}
The problem is probably not in your Datasource methods, but your Delegate methods, tableView(_:heightForRowAt:).
If you do not return a correct height for the cell, it won't show up.
It doesn't matter if you write 1000 cells in your datasource. If you don't return the height, they wont show up.
You are not comforming to the MVC pattern in implementing the table. You must return the count of the tableView's datasource, not variables of it.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (section == SectionNumber_One) {
return 6;
} else {
return [_displayingArray count]; // <-- here
}
}
If you want different items for each sections, then declare different datasource (ie array) for each of them.
EDIT: Even returning constant 6 is dangerous in the other section - you ought to add items to another fixed array and return that array's count in this delegate.
My UITableView have 2 section are "Local currency" and "All currencies".
No problem when I search and both section return results. But when I search and return results only within section 2 then no cell in section "All currencies" be displayed. It 's just only display header of "Local currency" with 0 cell.
I want to when I search if which section no have in result then this header of its session will be hidden and just which secion have result will be display header and its content.
This is my code and searchResultsLocal,searchResultsPopular are the two results NSArray when I search:
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
//if (searchResultsLocal.count > 0 && searchResultsPopular.count > 0) {
// return 2;
//}
return 2;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (section==0) {
return [searchResultsLocal count];
}
return searchResultsPopular.count;
}
Ay help is appreciable. Thanks in advance.
Tks u so much.I have figure out solution :
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
if ([tableView.dataSource tableView:tableView numberOfRowsInSection:section] == 0) {
return 0;
}
return 20;
}
i have UITableView header custom like Instagram where my section acts header, in this tableview i also using paging to get the data from server.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
if (currentPage == 0) {
return 1;
}
if (currentPage < totalPages) {
return myObject.count+1;
}
return myObject.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
return 1;
}
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection (NSInteger)section
{
myTimeline = [myObject objectAtIndex:section];
//the rest of my code to display text in UILabel cell, etc
}
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if (cell.tag == kLoadingCellTag) {
currentPage++;
[self getTimeline];
}
}
Now the problem is, I already make sure that my paging is working and myObject array count is increase.
But when i do the scroll it crash in method viewForHeaderInSection with reason "index 10 beyond bounds [0 .. 9]'" (i set the paging in in server with 10 items per page)
I think the section in ViewForHeaderInSection not updating with numberOfSectionsInTableView method that i already setup.
So how to make the section in ViewForHeaderInSection updated?
Thanks..
Your numberOfSectionsInTableview has return myObject.count+1;, so the table view is dutifully asking for the header for the last section, which is beyond the bounds of your myObject array. You need either to remove the +1 or, if it's there for a reason, to include code in viewForHeaderInSection to handle that special case:
if (currentPage > 0 && currentPage < totalPages && section == myObject.count) {
// create whatever header view is appropriate for the final section
} else {
myTimeline = ... etc
}
I have a collection view with more sections, so how to set the number of cell in section in collection view. Thank for help
// Hi Please fallow this code it may help you
// This collectionView delegate method defined number of section we need
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 2;
}
/* This collectionView delegate method for define number of cell need to return in section
*/
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
if (section == 0)
{
return 10;
}
else
{
return 20;
}
}
You can use the method:
– numberOfItemsInSection:
Or you can refer:
https://developer.apple.com/library/ios/documentation/uikit/reference/UICollectionView_class/Reference/Reference.html#//apple_ref/doc/uid/TP40012177-CH1-DontLinkElementID_5
for UICollectionView details...
I have several sections in a uitableview as shown here:
How do I hide the first section header e.g. Men.
Try overriding GetHeightForHeader in UITableViewSource, and returning 0 it's the first section
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
if (section == 0) return 0;
return tableView.sectionHeaderHeight;
}
In Xamarin, it would look like:
public override float GetHeightForHeader (UITableView tableView, int section)
{
if (section == 0)
return 0;
return tableView.SectionHeaderHeight;
}