如何设置tableview委托

时间:2010-03-16 13:18:30

标签: iphone ios objective-c delegates uitableview

我正在尝试使用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控制器)

5 个答案:

答案 0 :(得分:29)

您需要使您的班级符合UITableViewDelegateUITableViewDataSource协议。 (cellForRowAtIndexPath:已在UITableViewDataSource协议中)

通过在类接口定义中使用尖括号来执行此操作:

@interface myViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {...}

您现在而不是在使用UITableViewController之前收到此警告的原因是因为UITableViewController已符合这些协议。

因此,实质上UITableViewController只是一个符合UITableViewDelegateUITableViewDataSource的类,并且有一个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.
      }
}