Je veux faire tableView avec plusieurs sections, mais je ne veux pas utiliser le dictionnaire, j'ai deux tableaux. Je veux que le premier tableau soit chargé dans la première section et le deuxième dans la deuxième.
J'ai arrayOne avec 3 éléments et arrayTwo avec 4 éléments alors comment les ajouter et les afficher en 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;
}
}
- (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;
}
Voici les lignes pertinentes de Swift 3:
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
}
// Veuillez noter que je n'ai inclus que ceux directement pertinents pour la construction d'un UITableView avec des sections. Je n'ai pas inclus editActions, didSelect ou d'autres fonctions de délégué UITableView.
La méthode TableView Delegate attribue déjà la section à : (NSInteger) section .. afin que nous puissions également utiliser switchCase
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
switch (section)
{
case 0:
return self.arrMedia.count;
break;
case 1:
return 1;
break;
}
return 0;
}
Changer ce if (section==0)
à if (indexPath.section==0)
Vous devez implémenter cette fonction:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(section == 0)
return arrSection1.count;
else
return arrSection2.count;
}
Votre numberOfRowsInSection
devrait ressembler à ceci:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (section == 0) {
return firstArray.count;
} else {
return secondArray.count;
}
}
Vous êtes sur la bonne voie ....
Considérons que vos deux tableaux sont arrOne
et 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;
}
}