私は複数のセクションでtableViewを作成したいのですが、辞書を使いたくありません。2つの配列があります。最初の配列を最初のセクションに、2番目のセクションを2番目のセクションにロードします。
3つのアイテムを持つarrayOneと4つのアイテムを持つarrayTwoがあるので、それらを追加してセクションに表示する方法を教えてください。
- (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;
}
関連する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デリゲート関数は含めませんでした。
TableViewデリゲートメソッドは、すでにセクションを:( NSInteger)sectionとして与えているため、switchCaseを使用することもできます
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
switch (section)
{
case 0:
return self.arrMedia.count;
break;
case 1:
return 1;
break;
}
return 0;
}
これを変更するif (section==0)
if (indexPath.section==0)
へ
この関数を実装する必要があります:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(section == 0)
return arrSection1.count;
else
return arrSection2.count;
}
numberOfRowsInSection
は次のようになります。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (section == 0) {
return firstArray.count;
} else {
return secondArray.count;
}
}
あなたはほぼ正しい軌道に乗っています...
2つの配列が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;
}
}