我想要使用UIViewController
来实现UITableViewDataSource
的方法。我有这个标题,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()
的实现/声明是否有问题?
修改:我添加了一种方法列表技术here并运行视图'未连接',它输出以下列表:
[<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
Post scriptum: @ThisDarkTao和@Pei都做对了,我在上一个记录视觉部分的问题中可以看到here。
答案 0 :(得分: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);
}
答案 1 :(得分:1)
如果您在项目中使用Storyboard,则必须将UIViewController
的Class字段设置为故事板Identity Inspector上的“FriendsController”。
因此,您可以展示您的UIVIewController
以使用正确的课程(在本例中为FriendController)。
培