我是iOS新手,这似乎是一个基本问题。我一直在研究this tutorial,我不知道tableview是如何连接到代码的。示例项目可以是downloaded here。
我理解你需要在代码中扩展UITableViewDelegate,UITableViewDataSource,然后在故事板中你可以从tableview拖到它们。
但令人困惑的是,示例项目根本没有扩展UITableViewDelegate,UITableViewDataSource,因此,故事板中的tableview如何连接到代码?
答案 0 :(得分:1)
数据源用于提供数据,委托用于提供行为。 UITableView每次需要显示数据时都会询问您的数据源。它为您选择表示基础数据模型提供了很大的灵活性。您只需定义要使用的特定方法来获取表信息,iOS可以在需要知道某个部分中的行数或特定行的内容时调用它们。
您将来可能会实现自己的委托机制。这是一个很好的设计模式,可以处理对象之间的交互/数据传输。
答案 1 :(得分:1)
因为,基本类采用了UITableViewController
@interface WTTableViewController : UITableViewController
在你的故事板中,你只需从tableview拖动到viewController并选择delegate和dataSource。
答案 2 :(得分:1)
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewDataSource_Protocol/你应该参考一下它会帮助你很多
答案 3 :(得分:1)
如果您使用TableViewController,UITableViewDelegate
和UITableViewDataSource
会自动连接到表。如果您正在使用包含TableView的ViewControler,则必须添加UITableViewDelegate
和UITableViewDataSource
,如下所示:@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.
}
我建议您阅读iOS上的初学者书籍或教程,以获取整体设计原则,否则很多事情都会让人感到困惑。