ペン先を使用せず、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 {
UIViewController
がUITableView
デリゲートプロトコルを実装していないという警告が表示されます。
デリゲートメソッドがどこにあるかをテーブルビューに伝える正しい方法は何ですか?
(これは、新しいファイルオプションからUITableView
コントローラーを選択せずにUITableTableview
を使用しようとする私の最初の試みです)
クラスをUITableViewDelegate
およびUITableViewDataSource
プロトコルに準拠させる必要があります。 (cellForRowAtIndexPath:
はUITableViewDataSource
プロトコルに含まれています)
これを行うには、クラスインターフェイス定義で山かっこを使用します。
@interface myViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {...}
UITableViewController
を使用していたときではなく、現在この警告が表示される理由は、UITableViewController
がすでにこれらのプロトコルに準拠しているためです。
したがって、本質的に、UITableViewController
は、UITableViewDelegate
およびUITableViewDataSource
に準拠し、UITableView
インスタンスメンバーを持つ単なるクラスです。それはほとんどそれです。
もちろん、まだUITableViewController
をサブクラス化していない場合は、dataSource
のdelegate
とUITableView
を手動で設定する必要があります。
[tableView setDelegate:self];
[tableView setDataSource:self];
また、dataSourceデリゲートをselfに設定する必要があります。
[tableView setDelegate:self];
[tableView setDataSource:self];
または、同様に:
tableview.delegate = self;
tableview.dataSource = self;
[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 >
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.
}
}