使 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>
您错过了设置 delegate
和 dataSource
可以通过两种方式完成:
使用代码:
[self.tableView setDelegate:self];
[self.tableView setDataSource:self];
将此代码放入 viewDidLoad:
- 使用故事板:按住 ctrl 从
tableView
拖动到您的 ViewController
并将其设置为 delegate
和 dataSource
。见下图。
编辑:
- 为什么我们不需要也连接 table 的手机?
答案:Table 单元格从 dataSource
方法 tableView:cellForRowAtIndexPath:
返回。此单元格显示在 tableView
中。所以我们不在故事板中连接它。但是我们可以在故事板中配置它。
- 数据源和委托有什么区别?
Ans: Delegate: 委托是一个对象,它被委托控制该事件的用户界面。
数据源:数据源就像一个委托,不同之处在于,它不是被委托控制用户界面,而是被委托控制数据.
有关详细信息,请参阅 Delegates and Data Sources and this answer.
我是 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>
您错过了设置 delegate
和 dataSource
可以通过两种方式完成:
使用代码:
[self.tableView setDelegate:self]; [self.tableView setDataSource:self];
将此代码放入 viewDidLoad:
- 使用故事板:按住 ctrl 从
tableView
拖动到您的ViewController
并将其设置为delegate
和dataSource
。见下图。
编辑:
- 为什么我们不需要也连接 table 的手机?
答案:Table 单元格从 dataSource
方法 tableView:cellForRowAtIndexPath:
返回。此单元格显示在 tableView
中。所以我们不在故事板中连接它。但是我们可以在故事板中配置它。
- 数据源和委托有什么区别?
Ans: Delegate: 委托是一个对象,它被委托控制该事件的用户界面。
数据源:数据源就像一个委托,不同之处在于,它不是被委托控制用户界面,而是被委托控制数据.
有关详细信息,请参阅 Delegates and Data Sources and this answer.