I'm trying to use a UITableView
without using a nib and without using a UITableViewController
.
I have added a UITableView
instance to a UIViewController
Like So
mytable = [[UITableView alloc] initWithFrame:CGRectMake(22, 207, 270, 233)];
[mytable setDelegate:self];
[self.view mytable];
Also I have added the following table view methods to my UIViewController
(cut for brevities sake)
- (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 {
I am getting a warning saying that my UIViewController
does not implement UITableView
delegate protocol.
Whats the correct way to tell the table view where its delegate methods are?
(This is my first attempt at trying to use a UITableView
without selecting the UITableTableview
controller from the new file options)
You have to give it definitely, Why because of the two required methods of
UITableView
are underUITableViewDataSource
protocol.The warning is just telling you that your
@interface
section should declare that you implement theUITableViewDelegate
protocol:In Swift3 this is how you set
UITableViewDelegate
:You also must set the dataSource delegate to self:
or, equally:
You need to conform your class to the
UITableViewDelegate
andUITableViewDataSource
protocols. (cellForRowAtIndexPath:
is in theUITableViewDataSource
protocol )Do this by using angle brackets in your class interface definition:
The reason why you are getting this warning now and not before when you were using a
UITableViewController
is becauseUITableViewController
already conforms to these protocols.So, in essence a
UITableViewController
is just a class that conforms toUITableViewDelegate
andUITableViewDataSource
, and has aUITableView
instance member. That's pretty much it.Of course, if you're not already subclassing
UITableViewController
, then you need to manually setup thedataSource
anddelegate
of theUITableView
: