web-dev-qa-db-ja.com

テーブルビューデリゲートを設定する方法

ペン先を使用せず、UITableViewを使用せずにUITableViewControllerを使用しようとしています。

UITableViewインスタンスをUIViewControllerに追加しました

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 {

UIViewControllerUITableViewデリゲートプロトコルを実装していないという警告が表示されます。

デリゲートメソッドがどこにあるかをテーブルビューに伝える正しい方法は何ですか?

(これは、新しいファイルオプションからUITableViewコントローラーを選択せず​​にUITableTableviewを使用しようとする私の最初の試みです)

12
dubbeat

クラスをUITableViewDelegateおよびUITableViewDataSourceプロトコルに準拠させる必要があります。 (cellForRowAtIndexPath:UITableViewDataSourceプロトコルに含まれています)

これを行うには、クラスインターフェイス定義で山かっこを使用します。

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

UITableViewControllerを使用していたときではなく、現在この警告が表示される理由は、UITableViewControllerがすでにこれらのプロトコルに準拠しているためです。

したがって、本質的に、UITableViewControllerは、UITableViewDelegateおよびUITableViewDataSourceに準拠し、UITableViewインスタンスメンバーを持つ単なるクラスです。それはほとんどそれです。

もちろん、まだUITableViewControllerをサブクラス化していない場合は、dataSourcedelegateUITableViewを手動で設定する必要があります。

[tableView setDelegate:self];
[tableView setDataSource:self];
29
Jacob Relkin

また、dataSourceデリゲートをselfに設定する必要があります。

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

または、同様に:

tableview.delegate = self;
tableview.dataSource = self;
16
ma11hew28
[tableview setDataSource:self]

あなたは間違いなくそれを与えなければなりません、なぜ2つの理由で 必須UITableViewのメソッドはUITableViewDataSourceプロトコルの下にあります。

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

警告は、あなたの@interfaceセクションは、UITableViewDelegateプロトコルを実装することを宣言する必要があります。

@interface MyUIViewController : UIViewController < UITableViewDelegate >
1
David Gelhar

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.
      }
}
0
silentsudo