tableview连接到数据源和委托 - 如何

时间:2015-07-28 12:08:26

标签: ios objective-c iphone uitableview

我是iOS新手,这似乎是一个基本问题。我一直在研究this tutorial,我不知道tableview是如何连接到代码的。示例项目可以是downloaded here

我理解你需要在代码中扩展UITableViewDelegate,UITableViewDataSource,然后在故事板中你可以从tableview拖到它们。

但令人困惑的是,示例项目根本没有扩展UITableViewDelegate,UITableViewDataSource,因此,故事板中的tableview如何连接到代码?

6 个答案:

答案 0 :(得分:1)

数据源用于提供数据,委托用于提供行为。 UITableView每次需要显示数据时都会询问您的数据源。它为您选择表示基础数据模型提供了很大的灵活性。您只需定义要使用的特定方法来获取表信息,iOS可以在需要知道某个部分中的行数或特定行的内容时调用它们。

您将来可能会实现自己的委托机制。这是一个很好的设计模式,可以处理对象之间的交互/数据传输。

答案 1 :(得分:1)

因为,基本类采用了UITableViewController

@interface WTTableViewController : UITableViewController

在你的故事板中,你只需从tableview拖动到viewController并选择delegate和dataSource。

答案 2 :(得分:1)

答案 3 :(得分:1)

如果您使用TableViewController,UITableViewDelegateUITableViewDataSource会自动连接到表。如果您正在使用包含TableView的ViewControler,则必须添加UITableViewDelegateUITableViewDataSource,如下所示:@interface myViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>。在新版本的Xcode中,您可以将委托和数据源拖到表中,如果要以编程方式设置委托,可以添加以下两行代码:

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


或者,同样地:

tableview.delegate = self;
tableview.dataSource = self;

答案 4 :(得分:1)

在viewcontroller.h文件中 声明委托和数据源方法。

UIViewController<UITableViewDataSource,UITableViewDelegate>

然后 将delegate和datasource方法与viewController连接起来 在viewController.m文件中

- (void)viewDidLoad {
tableview.delegate=self;
tableview.dataSource=self;
}

答案 5 :(得分:0)

在Objective-C / iOS中,您经常通过让类符合协议而不是子类化来实现。 WTTableViewController符合协议 UITableViewDataSource:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewDataSource_Protocol/ 和 UITableViewDelegate:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewDelegate_Protocol/

在MainStoryboard.storyboard中,您可以在检查器中看到TableViewController具有自定义类WTTableViewController

WTTableViewController.m中的相关方法:

#pragma mark - Table view data source

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 0;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"WeatherCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    // Configure the cell...


    return cell;
}


#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here. Create and push another view controller.
}

以下是有关协议的一般信息:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithProtocols/WorkingwithProtocols.html

我建议您阅读iOS上的初学者书籍或教程,以获取整体设计原则,否则很多事情都会让人感到困惑。