制作UITableViewDataSource的主视图控制器代理

时间:2015-05-15 08:15:52

标签: ios objective-c uitableview uiviewcontroller

我是iOS开发的新手。我的主视图控制器不会从其表视图中显示任何单元格。我试图将它设置为现在只显示一个单元格。主视图控制器是UIViewController的子类,并且还具有包含原型单元的表视图。所以我的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的表格视图是否应该正确显示单元格?想法?

3 个答案:

答案 0 :(得分:2)

您应该在viewDidLoad中使用:

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

答案 1 :(得分:2)

我没有看到Table View插座。您是否忘记将界面构建器中的表视图连接到视图控制器头文件?完成后,您还应该将表视图的委托和数据源属性分配给&#34; self&#34;。

答案 2 :(得分:1)

您的课程符合<UITableViewDataSource>

你也应该遵循UITableViewDelegate这样做。

@interface MainViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

您错过了delegatedataSource

的设置

可以通过两种方式完成:

  1. 使用代码:

    [self.tableView setDelegate:self];
    
    [self.tableView setDataSource:self];
    
  2. 将此代码放在viewDidLoad:

    1. 使用故事板:ctrl从tableView拖动到ViewController并将其设置为delegatedataSource。见下图。
    2. enter image description here

      编辑:

      1. 为什么我们也不需要连接桌子的电池?
      2. Ans:表格单元格从dataSource方法tableView:cellForRowAtIndexPath:返回。此单元格显示在tableView中。所以我们不在故事板中连接它。但是我们可以在故事板中配置它。

        1. 数据源和代理之间的区别是什么?
        2. Ans:委托:委托是一个对象,可以控制该事件的用户界面

          数据源:数据源就像委托一样,除了委托控制用户界面而不是委托控制数据

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