Reputation: 783
I want to make tableView with multiple section but i do not want to use dictionary i have two arrays i want that first array should be loaded in first section and second in second sections.
I have arrayOne with 3 items and arrayTwo with 4 items so how to add them and show them in sections.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(section == 0)
return resultArray.count;
else
return resultArray.count;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 2;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
NSLog(@"Number of Sections");
if(section == 0)
return @"Section 1";
if(section == 1)
return @"Section 2";
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"Table Cell Data");
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
appDelegate = (MultipleDetailViewsWithNavigatorAppDelegate *)[[UIApplication sharedApplication] delegate];
if (indexPath.section==0) {
appDelegate = (MultipleDetailViewsWithNavigatorAppDelegate *)[[UIApplication sharedApplication] delegate];
ObjectData *theCellData = [resultArray objectAtIndex:indexPath.row];
NSString *cellValue =theCellData.category;
NSLog(@"Cell Values %@",cellValue);
cell.textLabel.text = cellValue;
return cell;
}
else {
ObjectData *theCellData = [resultArray objectAtIndex:indexPath.row];
NSString *cellValue =theCellData.category;
cell.textLabel.text = cellValue;
return cell;
}
}
Upvotes: 39
Views: 71671
Reputation: 12216
Here are the relevant Swift 3 lines:
func numberOfSections (in tableView: UITableView) -> Int {
...
return numberOfSections
}
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
//Not necessary, but will let you format the section headers. Example:
guard let header = view as? UITableViewHeaderFooterView else { return }
header.textLabel?.font = UIFont.boldSystemFont(ofSize: 24)
header.textLabel?.textColor = UIColor.darkGray
header.textLabel?.textAlignment = .center
header.textLabel?.frame = header.frame
view.tintColor = UIColor.white
}
func tableView(_ tableView: UITableView, willDisplayFooterView view: UIView, forSection section: Int) {
//Also not necessary, but clear footers help space out sections
view.tintColor = UIColor.clear
}
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
//Spacing between sections:
return 25
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
...
return sectionCount
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//All your cell setup
...
//I call this to get the absolute row number (disregarding sections)
let row = getAbsoluteRow_InCurrentSection(indexPath: indexPath)
//Now you can use the row number to grab a value from an array or CoreData object and use the value to populate your cell!!
}
func getAbsoluteRow_InCurrentSection(indexPath: IndexPath) -> Int {
var aggRows = 0
if currentListEntity == "GrocTask" {
let curSection = indexPath.section
for i in 0..<curSection {
aggRows += flex1ArrayCnt[i]
}
aggRows += indexPath.row
}
return aggRows
}
//Please be aware, I only included those directly relevant to building a UITableView with sections. I did not include editActions, didSelect, or other UITableView delegate functions.
Upvotes: 1
Reputation: 1556
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 2 ;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (section==0)
{
return [array1 count];
}
else{
return [array2 count];
}
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
if(section == 0)
return @"Section 1";
else
return @"Section 2";
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
if (indexPath.section==0) {
ObjectData *theCellData = [array1 objectAtIndex:indexPath.row];
NSString *cellValue =theCellData.category;
cell.textLabel.text = cellValue;
}
else {
ObjectData *theCellData = [array2 objectAtIndex:indexPath.row];
NSString *cellValue =theCellData.category;
cell.textLabel.text = cellValue;
}
return cell;
}
Upvotes: 89
Reputation: 15991
TableView Delegate Method already give the section as :(NSInteger)section.. so we can also use switchCase
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
switch (section)
{
case 0:
return self.arrMedia.count;
break;
case 1:
return 1;
break;
}
return 0;
}
Upvotes: 0
Reputation: 4279
You are on almost right track....
Let us consider your two arrays are arrOne
and arrTwo
.....
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if(section == 0)
return [arrOne count];
else
return [arrTwo count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
if (indexPath.section==0) {
ObjectData *theCellData = [arrOne objectAtIndex:indexPath.row];
NSString *cellValue =theCellData.category;
NSLog(@"cellValue = %@",cellValue); //To see the value of string cellValue
cell.textLabel.text = cellValue;
return cell;
}
else {
ObjectData *theCellData = [arrTwo objectAtIndex:indexPath.row];
NSString *cellValue =theCellData.category;
cell.textLabel.text = cellValue;
return cell;
}
}
Upvotes: 0
Reputation: 4500
Change this if (section==0)
to if (indexPath.section==0)
You have to implement this function :
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(section == 0)
return arrSection1.count;
else
return arrSection2.count;
}
Upvotes: 0
Reputation: 318944
Your numberOfRowsInSection
should be something like this:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (section == 0) {
return firstArray.count;
} else {
return secondArray.count;
}
}
Upvotes: 0