Подтвердить что ты не робот

Как установить делегат tableview

Я пытаюсь использовать 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 из новых параметров файла)

4b9b3361

Ответ 1

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

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

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

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

Таким образом, по существу a UITableViewController - это просто класс, который соответствует UITableViewDelegate и UITableViewDataSource, и имеет член экземпляра UITableView. Это в значительной степени это.

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

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

Ответ 2

Вы также должны установить делегат dataSource для себя:

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

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

tableview.delegate = self;
tableview.dataSource = self;

Ответ 3

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

@interface MyUIViewController : UIViewController < UITableViewDelegate >

Ответ 4

[tableview setDataSource:self]

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

Ответ 5

В 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.
      }
}