我有一个UITableViewController类,我称之为“MasterViewController”。 从MasterViewController中我想显示一个使用不同的UITableViewController(而不是MasterViewController)的tableview。我正在这样做,因为另一个tableview已经使用MasterViewController作为其委托和数据源。
我在MasterViewController方法中有以下逻辑;
ToTableViewController *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];
[toTableView reloadData];
我希望ToTableViewController成为这个新tableview(toTableView)的委托和数据源。
问题是我的ToTableViewController cellForRowAtIndexPath方法没有被调用。实际上,没有调用任何委托方法。
任何反馈都将不胜感激。
添
答案 0 :(得分:0)
我很确定您的问题是toController
过早发布。使用ARC(我假设你也是),我按照你正在尝试的东西来玩它。我得到了相同的结果,其中委托方法似乎没有被调用。解决它的原因是不为toController
使用局部变量。而是将其声明为MasterViewController类的成员,如
@property (strong, nonatomic) ToTableViewController *toController;
然后使用变量名_toController
在代码中引用它。
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