我正在尝试使用UITableView
而不使用笔尖而不使用UITableViewController
。
我已将UITableView
个实例添加到UIViewController
喜欢So
mytable = [[UITableView alloc] initWithFrame:CGRectMake(22, 207, 270, 233)];
[mytable setDelegate:self];
[self.view mytable];
此外,我已将以下表格视图方法添加到UIViewController
(为了简洁而剪切)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
我收到警告,说我的UIViewController
没有实施UITableView
委托协议。
告诉表视图其委托方法的正确方法是什么?
(这是我第一次尝试使用UITableView
而没有从新文件选项中选择UITableTableview
控制器)
答案 0 :(得分:29)
您需要使您的班级符合UITableViewDelegate
和UITableViewDataSource
协议。 (cellForRowAtIndexPath:
已在UITableViewDataSource
协议中)
通过在类接口定义中使用尖括号来执行此操作:
@interface myViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {...}
您现在而不是在使用UITableViewController
之前收到此警告的原因是因为UITableViewController
已符合这些协议。
因此,实质上UITableViewController
只是一个符合UITableViewDelegate
和UITableViewDataSource
的类,并且有一个UITableView
实例成员。
这就是它。
当然,如果您尚未对UITableViewController
进行子类化,则需要手动设置dataSource
的{{1}}和delegate
:
UITableView
答案 1 :(得分:16)
您还必须将dataSource委托设置为self:
[tableView setDelegate:self];
[tableView setDataSource:self];
或同样地:
tableview.delegate = self;
tableview.dataSource = self;
答案 2 :(得分:1)
警告只是告诉您,@interface
部分应声明您实施了UITableViewDelegate
协议:
@interface MyUIViewController : UIViewController < UITableViewDelegate >
答案 3 :(得分:1)
[tableview setDataSource:self]
你必须明确地说明,为什么因为UITableView
的两个必需的方法属于UITableViewDataSource
协议。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
答案 4 :(得分:0)
在Swift3中,您可以设置UITableViewDelegate
:
class FeedsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var feedsTableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
feedsTableView.delegate = self
feedsTableView.dataSource = self
// Do any additional setup after loading the view.
}
}