Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios tableview连接到数据源和委托方式_Ios_Objective C_Iphone_Uitableview - Fatal编程技术网

Ios tableview连接到数据源和委托方式

Ios tableview连接到数据源和委托方式,ios,objective-c,iphone,uitableview,Ios,Objective C,Iphone,Uitableview,我是iOS新手,这似乎是一个基本问题。我一直在研究,不知道tableview是如何连接到代码的。示例项目可以是 我的理解是,您需要在代码中扩展UITableViewDelegate、UITableViewDataSource,然后在情节提要中可以从tableview拖动到它们 但令人困惑的是,示例项目根本没有扩展UITableViewDelegate、UITableViewDataSource,因此,故事板中的tableview如何连接到代码?Datasource用于提供数据,delegate用

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

我的理解是,您需要在代码中扩展UITableViewDelegate、UITableViewDataSource,然后在情节提要中可以从tableview拖动到它们


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

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


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

因为基本类采用了UITableViewController

@接口WTTableViewController:UITableViewController

在故事板中,您只需按ctrl键从tableview拖动到viewController,然后选择委派和数据源。

您应该参考这一点。如果您使用TableViewController,
UITableViewDelegate
UITableViewDataSource
将自动连接到表格,这将非常有帮助。如果您正在使用包含TableView的ViewControler,则必须添加
UITableViewDelegate
UITableViewDataSource
,如下所示:
@interface myViewController:UIViewController
。在新版本的Xcode中,您可以将委托和数据源拖到表中,如果您想以编程方式设置委托,可以添加以下两行代码:

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

或者,同样地:

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

在Objective-C/iOS中,通常通过使类符合协议而不是子类化类来实现。WTTableViewController符合协议 UITableViewDataSource: 和 UITableViewDelegate:

在MainstryBoard.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的入门书或教程,了解总体设计原则,否则许多事情可能会非常混乱。

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

UIViewController<UITableViewDataSource,UITableViewDelegate>

刚刚更新了我的问题,请刷新您的页面。您的tableview已连接到委派和数据源。因此无需扩展UITableViewDelegate,UITableViewDataSource?你是说。。。仅仅从tableview拖到委托和数据源是否足够?那么为什么我们甚至需要扩展UITableViewDelegate,UITableViewDataSource您使用默认的tableviewController,这样从tableview拖到委托和数据源是不够的。但是在我看到的一些示例中,代码中实际扩展的UITableViewDel?egate,UITableViewDataSource,他在故事板中设置他的委托和数据源的目的是什么。所以不需要写这个。我看到了,但问题并不是这样定义的,他一般都在问,所以我解释了两种方法,以防他有时需要它。
- (void)viewDidLoad {
tableview.delegate=self;
tableview.dataSource=self;
}