我很确定您的问题是toController
发布得太早了。使用 ARC(我假设您也是),我按照您的尝试使用它。我得到了相同的结果,委托方法似乎没有被调用。解决的方法是不为toController
. 而是将其声明为 MasterViewController 类的成员,例如
@property (strong, nonatomic) ToTableViewController *toController;
然后在代码中使用变量名_toController
来引用它。
编辑:为了在我的第一个测试中清楚,我有 ToTableViewController 从 UITableViewController 继承。因为这样我真的不需要添加 UITableView 你正在创建和附加委托(你可以直接使用 _toController.view )所以在第二个测试中我从头开始创建了一个 ToTableViewController 继承自委托协议,其中单独的UITableView 变得很有必要。只是为了完整起见,这里是有效的代码:
ToTableViewController.h
#import <Foundation/Foundation.h>
@interface ToTableViewController : NSObject <UITableViewDelegate, UITableViewDataSource>
@end
ToTableViewController.m
#import "ToTableViewController.h"
@implementation ToTableViewController
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 13;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
NSString *str1 = @"Row #";
cell.textLabel.text = [str1 stringByAppendingFormat:@"%d", indexPath.row+1];
return cell;
}
@end
MasterViewController.m(我在 .m 文件中声明了 toController ,如图所示,但可以在 .h 文件中这样做......)
#import "MasterViewController.h"
#import "ToTableViewController.h"
@interface MasterViewController ()
@property (strong, nonatomic) ToTableViewController *toController;
@end
@implementation MasterViewController
- (void)viewDidLoad
{
[super viewDidLoad];
_toController = [[ToTableViewController alloc] init];
UIView *toView = [[UIView alloc] initWithFrame:CGRectMake(10,10,250,200)];
toView.backgroundColor = [UIColor redColor];
UITableView *toTableView = [[UITableView alloc] initWithFrame:CGRectMake(10,10,220,180) style:UITableViewStylePlain];
[toTableView setDelegate:_toController];
[toTableView setDataSource:_toController];
[toView addSubview:toTableView];
[self.view addSubview:toView];
}
@end