我有2个UIViewControllers
,其中2个完全包含SAME UITableView
(带有自定义单元格和委托方法)。
我的问题是他们以任何方式集中化" UITableView
用户界面和代码(数据源和代理),因此我只需要在一个文件而不是2个文件中进行修改。
答案 0 :(得分:1)
跟进我的评论,你父亲vc中xib中的表视图和你父vc中的委托方法只是在同一个地方,因为你选择它就像那样,表视图和委托方法是实际上相当分离。
所以创建一个新对象,比如FatherTableController
实现UITableViewDatasource
和UITabelViewDelegate
并将这些方法从FatherViewController
复制到此FatherTableController
现在在你的FatherViewController中,像
一样FatherTableController tableController = [FatherTableController new]; //should be a property or a singleton
self.tableview.delegate = tableController;
self.tableview.datasource = tableController;
现在你可以在使用同一个表的单独vc中执行此操作,如果以某种方式共享它,甚至可以在两个视图之间使用完全相同的表控制器(可能通过单例模式,可以用于在两个视图控制器之间共享状态)
答案 1 :(得分:0)
<强>解决方案:强>
@interface FatherViewController : UIViewController <UITableViewDataSource,UITableViewDelegate>
@property (strong, nonatomic) IBOutlet UITableView *parentTableView;
@implementation FatherViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.parentTableView.delegate=self;
self.parentTableView.dataSource=self;
}
//declare the delegate / datasource methods
---------------------儿童视图控制器---------------------
@interface ViewController : FatherViewController
@property (strong, nonatomic) IBOutlet UITableView *tableView;
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.delegate=self;
self.tableView.dataSource=self;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
return [super tableView:tableView cellForRowAtIndexPath:indexPath];
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return [super numberOfSectionsInTableView:tableView];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return [super tableView:tableView numberOfRowsInSection:section];
}