1

我有一个UIViewController我想用来实现UITableViewDataSourceon 的方法。我有这个标题,FriendsController.h

#import <UIKit/UIKit.h>
@interface FriendsController : UIViewController <UITableViewDataSource>
@end

编辑:现在将@interface声明更新为:

@interface FriendsController : UIViewController <UITableViewDataSource, UITableViewDelegate>

和这个实现,FriendsController.m

#import "FriendsController.h"

@implementation FriendsController

- (NSInteger)tableView:(UITableView *)tableView 
numberOfRowsInSection:(NSInteger)section
{
  // Return the number of rows in the section.
  NSLog(@"CALLED .numberOfRowsInSection()");
  return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  NSLog(@"CALLED cellForRowAtIndexPath()");
  UITableViewCell *cell = [tableView
                             dequeueReusableCellWithIdentifier:@"FriendCell"];
  cell.textLabel.text = @"Testing label";
  return cell;
}
@end

运行时,这给了我一个' -[UIView tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x81734d0'。谁能看看我的实现/声明是否有问题.numberOfRowsInSection()

编辑:我从这里添加了一种方法列表技术并运行视图“未连接”,它输出以下列表:

[<timestamp etc>] Method no #0: tableView:numberOfRowsInSection:
[<timestamp etc>] Method no #1: tableView:cellForRowAtIndexPath:
[<timestamp etc>] Method no #2: numberOfSectionsInTableView:
[<timestamp etc>] Method no #3: tableView:didSelectRowAtIndexPath:
[<timestamp etc>] Method no #4: viewDidLoad

发布脚本: @ThisDarkTao 和@Pei 都做对了,这可以在我之前记录视觉部分的问题中看到,here

4

2 回答 2

1

您需要添加UITableViewDelegate到接口文件中的协议列表中,如下所示:<UITableViewDataSource, UITableViewDelegate>

您还需要以下所有委托方法:

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 1; // Number of rows
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    cell.textLabel.text = @"Test Cell";

    return cell;
}

在您的 xib/storyboard 视图中,您还需要将 tableview 的委托和数据源连接连接到 viewcontroller。

如果您希望您的单元格在您点击它们时“做某事”,您还需要实现以下委托方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"Tapped cell %d",indexPath.row);     
}
于 2012-05-28T13:35:53.587 回答
1

如果您在项目中使用 Storyboard,则必须在 Storyboard 的UIViewControllerIdentity Inspector 上将 Class 字段设置为您的“FriendsController”。因此,您可以展示您UIVIewController正在使用正确的类(在这种情况下,为您提供 FriendController)。

裴。

于 2012-05-28T14:23:10.327 回答