как установить делегат в виде таблицы - PullRequest
12 голосов
/ 16 марта 2010

Я пытаюсь использовать UITableView без использования пера и без использования UITableViewController.

Я добавил UITableView экземпляр к UIViewController Like 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 ]

29 голосов
/ 16 марта 2010

Вы должны согласовать свой класс с протоколами UITableViewDelegate и UITableViewDataSource. (cellForRowAtIndexPath: в протоколе UITableViewDataSource)

Сделайте это, используя угловые скобки в определении интерфейса вашего класса:

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

Причина, по которой вы получаете это предупреждение сейчас, а не раньше, когда вы использовали UITableViewController, заключается в том, что UITableViewController уже соответствует этим протоколам.

Итак, по сути, UITableViewController - это просто класс, который соответствует UITableViewDelegate и UITableViewDataSource и имеет элемент UITableView instance. Вот и все.

Конечно, если вы еще не подклассы UITableViewController, то вам нужно вручную настроить dataSource и delegate UITableView:

[tableView setDelegate:self];
[tableView setDataSource:self];
16 голосов
/ 18 июля 2010

Вы также должны установить для делегата источника данных значение self:

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

или, в равной степени:

tableview.delegate = self;
tableview.dataSource = self;
1 голос
/ 11 марта 2014
[tableview setDataSource:self]

Вы должны дать это определенно, Почему из-за двух необходимых методов UITableView в соответствии с протоколом UITableViewDataSource.

* +1007 *
1 голос
/ 16 марта 2010

Предупреждение просто говорит вам, что ваш раздел @interface должен объявить, что вы реализуете протокол UITableViewDelegate:

@interface MyUIViewController : UIViewController < UITableViewDelegate >
0 голосов
/ 12 декабря 2016

В 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.
      }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...