使 UITableViewDataSource 的主视图控制器委托

Making Main View Controller Delegate of UITableViewDataSource

我是 iOS 开发的新手。我的主视图控制器不显示其 table 视图中的任何单元格。我试图将其设置为暂时只显示一个单元格。主视图控制器是 UIViewController 的子类,并且还有一个带有原型单元格的 table 视图。所以我的 MainViewController.h 文件如下所示:

#import <UIKit/UIKit.h>

@interface MainViewController : UIViewController <UITableViewDataSource>

@property (weak, nonatomic) IBOutlet UIBarButtonItem *sidebarButton;

@end

我让 MainVewController 成为 UITableViewDataSource 的委托,这是正确的想法吗?我的 MainViewController.m 如下所示:

#import "MainViewController.h"
#import "SWRevealViewController.h"

@interface MainViewController ()

@end

@implementation MainViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.title = @"Home";

    SWRevealViewController *revealViewController = self.revealViewController;

    if(revealViewController) {
        [self.sidebarButton setTarget: self.revealViewController];
        [self.sidebarButton setAction: @selector(revealToggle:)];
        [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];

    }

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 1; //change to number of post objects in array (array.count)
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"basicCell" forIndexPath:indexPath];

    return cell;


}

@end

我不明白我在这里做错了什么。我的 MainViewController 的 Table 视图不应该正确显示单元格吗?想法?

你应该在 viewDidLoad 中使用:

[self.tableView setDelegate:self];
[self.tableView setDataSource:self];

我没有看到 Table 查看插座。您是否忘记将 Table View 从 Interface Builder 连接到您的视图控制器头文件?这样做之后,您还应该将 table 视图的委托和数据源属性分配给 "self".

你的class刚好符合<UITableViewDataSource>

你也应该按照UITableViewDelegate这样做。

@interface MainViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

您错过了设置 delegatedataSource

可以通过两种方式完成:

  1. 使用代码:

    [self.tableView setDelegate:self];
    
    [self.tableView setDataSource:self];
    

将此代码放入 viewDidLoad:

  1. 使用故事板:按住 ctrl 从 tableView 拖动到您的 ViewController 并将其设置为 delegatedataSource。见下图。

编辑:

  1. 为什么我们不需要也连接 table 的手机?

答案:Table 单元格从 dataSource 方法 tableView:cellForRowAtIndexPath: 返回。此单元格显示在 tableView 中。所以我们不在故事板中连接它。但是我们可以在故事板中配置它。

  1. 数据源和委托有什么区别?

Ans: Delegate: 委托是一个对象,它被委托控制该事件的用户界面

数据源:数据源就像一个委托,不同之处在于,它不是被委托控制用户界面,而是被委托控制数据.

有关详细信息,请参阅 Delegates and Data Sources and this answer.