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 11ios 开发新手,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 应用程序)

如何用XCode创建Objective-c和C++的混编工程?