使用UI /委托方法重用UITableView

时间:2014-12-12 10:02:51

标签: ios objective-c uitableview uiviewcontroller

我有2个UIViewControllers,其中2个完全包含SAME UITableView(带有自定义单元格和委托方法)。 我的问题是他们以任何方式集中化" UITableView用户界面和代码(数据源和代理),因此我只需要在一个文件而不是2个文件中进行修改。

2 个答案:

答案 0 :(得分:1)

跟进我的评论,你父亲vc中xib中的表视图和你父vc中的委托方法只是在同一个地方,因为你选择它就像那样,表视图和委托方法是实际上相当分离。

所以创建一个新对象,比如FatherTableController实现UITableViewDatasourceUITabelViewDelegate并将这些方法从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];
}