UITableView с несколькими разделами
Я хочу сделать tableView с несколькими разделами, но я не хочу использовать словарь. У меня есть два массива. Я хочу, чтобы первый массив был загружен в первом разделе, а второй во втором разделе.
У меня есть arrayOne с 3 элементами и arrayTwo с 4 элементами, поэтому, как их добавить и показать в разделах.
- (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;
}
}
Ответы
Ответ 1
- (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;
}
Ответ 2
Измените это if (section==0)
to if (indexPath.section==0)
Вы должны реализовать эту функцию:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(section == 0)
return arrSection1.count;
else
return arrSection2.count;
}
Ответ 3
Ваш numberOfRowsInSection
должен выглядеть примерно так:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (section == 0) {
return firstArray.count;
} else {
return secondArray.count;
}
}
Ответ 4
Ты на правильном пути...
Рассмотрим два ваших массива: arrOne
и 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;
}
}
Ответ 5
Метод делегата TableView уже предоставляет раздел как: (NSInteger) раздел.. поэтому мы также можем использовать switchCase
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
switch (section)
{
case 0:
return self.arrMedia.count;
break;
case 1:
return 1;
break;
}
return 0;
}
Ответ 6
Вот соответствующие строки 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
}
//Обратите внимание, что я включил только те, которые имеют непосредственное отношение к созданию UITableView с разделами. Я не включил функции editActions, didSelect или другие функции делегата UITableView.