Xcode11中用Objective-C将UITableView分成几个部分
Posted
技术标签:
【中文标题】Xcode11中用Objective-C将UITableView分成几个部分【英文标题】:Divide UITableView into sections with Objective-C in Xcode11 【发布时间】:2019-10-07 14:05:22 【问题描述】:我是 Xcode 11 的 ios 开发新手,Objective-C
,所以请多多包涵。
我的目标是创建两个页面,其中第一页有一个按钮,按下后会转到第二页。在第二页中,我有一个包含一些数据的简单列表。
我试图将这个TableView
分成几个部分。到目前为止,我已经创建了一个按钮,并且可以使用Segue
从一个页面“跳转”到另一个页面。但是在用数据归档列表时遇到了麻烦。我正在尝试制作这个页面:
但我得到的列表没有任何数据:
这是我的main.storyboard
:
对于第二个视图,我创建了一个新类 SecondControllerView.m
并将这个类附加到第二页
//SecondControllerView.m
#import "SecondViewController.h"
@interface SecondViewController ()
NSMutableArray *numArray;
NSMutableArray *numArray1;
NSMutableArray *numArray2;
NSMutableArray *numArray3;
NSMutableArray *numArray4;
NSMutableArray *numArray5;
NSMutableArray *numArray6;
NSMutableArray *numArray7;
NSMutableArray * sectionArray;
@end
@implementation SecondViewController
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view.
numArray = [NSMutableArray arrayWithObjects:@"unit 1",@"unit 2",@"unit 3",@"unit 4",nil];
numArray1 = [NSMutableArray arrayWithObjects:@"unit 1",@"unit 2",@"unit 3",@"unit 4",nil];
numArray2 = [NSMutableArray arrayWithObjects:@"unit 1",@"unit 2",@"unit 3",@"unit 4",nil];
numArray3 = [NSMutableArray arrayWithObjects:@"unit 1",@"unit 2",@"unit 3",@"unit 4",nil];
numArray4 = [NSMutableArray arrayWithObjects:@"unit 1",@"unit 2",@"unit 3",@"unit 4",nil];
numArray5 = [NSMutableArray arrayWithObjects:@"unit 1",@"unit 2",@"unit 3",@"unit 4",nil];
numArray6 = [NSMutableArray arrayWithObjects:@"unit 1",@"unit 2",@"unit 3",@"unit 4",nil];
numArray7 = [NSMutableArray arrayWithObjects:@"unit 1",@"unit 2",@"unit 3",@"unit 4",nil];
sectionArray = [NSMutableArray arrayWithObjects:@"tour 1",@"tour 2",@"tour 3",@"tour 4",@"tour 5",@"tour 6",@"tour 7",@"tour 8",nil];
NSLog(@"Hello world");
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
return sectionArray.count;
-(NSString * )tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
return sectionArray[section];
-(NSInteger)tableView:(nonnull UITableView *)tableView numberOfRowsInSection:(NSInteger)section
int count = 0;
if(section == 0)
return numArray.count;
else if (section == 1)
return numArray1.count;
else if (section == 2)
return numArray2.count;
else if(section == 3)
return numArray3.count;
else if(section == 4)
return numArray4.count;
else if(section == 5)
return numArray5.count;
else if(section == 6)
return numArray6.count;
else if(section == 7)
return numArray7.count;
return count;
-(nonnull UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
if(indexPath.section == 0)
cell.textLabel.text = numArray[indexPath.row];
else if(indexPath.section == 1)
cell.textLabel.text = numArray1[indexPath.row];
else if(indexPath.section == 2)
cell.textLabel.text = numArray2[indexPath.row];
else if(indexPath.section == 3)
cell.textLabel.text = numArray3[indexPath.row];
else if(indexPath.section == 4)
cell.textLabel.text = numArray4[indexPath.row];
else if(indexPath.section == 5)
cell.textLabel.text = numArray5[indexPath.row];
else if(indexPath.section == 6)
cell.textLabel.text = numArray6[indexPath.row];
else if(indexPath.section == 7)
cell.textLabel.text = numArray7[indexPath.row];
return cell;
@end
这里有什么问题?
【问题讨论】:
您似乎已将UITableView
添加到您的SecondViewController
,但尚未通过@IBOutlet
连接它和/或尚未设置其.delegate
和.dataSource
。
@DonMag 可能你是对的,因为我第一次听到这些话。我会谷歌它
如果您将每个部分的数组放入一个数组中,您的代码会简单得多,这样您就有了一个由项目数组组成的数组。使用单独的变量是导致所有if...else...else...else...else...
的原因。
【参考方案1】:
首先,将SecondViewController
设为表视图https://guides.codepath.com/ios/Table-View-Guide的Delegate和DataSource
其次,在viewDidLoad的末尾做[self.tableView reloadData]
【讨论】:
以上是关于Xcode11中用Objective-C将UITableView分成几个部分的主要内容,如果未能解决你的问题,请参考以下文章
Objective-C:如何将信号从视图发送到视图控制器以更改视图?
Xcode 11.4 和 iOS 13.4 打破了 Project 中的 Objective-C 类别
AppDelegate 和操作目标(Objective-c 2.0 和 Xcode)
在 Swift 3 / Xcode 8 (SharkORM) 中安装第三方 Objective-C 库
Xcode 11.4 Objective-C 语言的快速帮助,而不是 swift 语言,用于带有 Cocoapods 的 firebase API(iOS 13.4 应用程序)