主tableview将包含从用户添加/创建的行,该行将打开自己的tableview,它们也有自己的add / create自己的行。我的主要问题是如何确保在主tableview中添加的每一行都打开自己的tableview(在用户添加之前为空白)。
我见过的这个链接是最接近的How can I move to another view controller when the user clicks on a row?但不完全是我想要的。大多数样本/导师都是通常填充的,或者在他们的tableview中已经有一个数组。我想在其中完全没有任何内容,但仅由用户和主tableview添加,每行都会打开自己的tableview。
我已经有两个tableview,一个是main,另一个是sub到每一行。我能够在主表视图中插入行,但它打开与主tableview中其他行相同的tableview,并想知道如何确保主tableview中的每一行都打开自己的空白tableview。
答案 0 :(得分:1)
通常视图控制器控制tableView。我想你正试图在每个表中放入多个表视图和逻辑。相反,只需为每个表创建控制器。
首先使用UIViewController模板创建主视图控制器(不要使用TableViewController)。使用XIB并添加一个TableView元素,或使用代码创建一个UITableView实例。
现在创建一个符合委托和数据源协议的类。这不需要是视图控制器。例如:
// MiniTVC.h
@interface MiniTVC : NSObject <UITableViewDelegate, UITableViewDataSource>
@property (nonatomic, retain) IBOutlet UITableView *tableView;
@property (nonatomic, retain) NSArray *array;
-(id) initWithTableView:(UITableView*)tableView array:(NSArray*)array;
@end
并像往常一样实现委托和数据源方法。您至少需要以下内容:
tableView:heightForRowAtIndexPath:
numberOfSectionsInTableView:
tableView:numberOfRowsInSection:
tableView:cellForRowAtIndexPath:
然后回到主视图控制器,您创建(或使用IBOutlets从界面设计器挂钩)tableView并将其委托和数据源设置为您的MiniTVC类,例如:
// sample table created by code
CGRect frame = CGRectMake(50,50,100,100);
UITableView *tableView = [[UITableView alloc] initWithFrame:frame]
[self.view addSubView:tableView];
// set the datasource/delegate
MiniTVC *miniTVC = [[MiniTVC alloc] initWithTableView:self.tableView array:someArray];
tableView.dataSource = self.miniTVC;
tableView.delegate = self.miniTVC;
您可以重复此过程,从自定义UITableViewCell内创建另一个UITableView + MiniTVC。或者您可以使UITableViewCell符合表委托/数据源并在那里实现方法。
顺便说一下,在tableviews中创建tableviews有点不寻常。因为它们都是UIViewScroll子类,所以它可能导致意外行为,所以我没有尝试过。