是否可以在单个UIView上添加2个不同的UITableView,其中两个tableView的数据源和委托都在UIView类文件中处理?
答案 0 :(得分:1)
是。注意所有委托/数据源方法的第一个参数。它是正在处理的tableView的引用。
可以这样做,但根据具体情况,可能会有更优雅的方式来做你想做的事情。
答案 1 :(得分:0)
首先,您可能不应该将委托代码放在UIView类文件本身中以保持MVC模式。考虑使用一个UIViewController句柄,让UIView只处理有关绘制事物的方式和位置的事情。
除此之外,它是可能的。您将UITableView的委托都设置为superview的控制器。由于所有委托原型都需要将UITableView作为参数传入,因此您可以使用此传入的指针简单地验证哪个UITableView正在调用该方法,然后执行该UITableView的代码。
您可以将UITableView指针存储为控制器类中的IVars,以便稍后查找。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (tableView == myFirstTableView) {
return myFirstTableViewHeight;
else if (tableView == mySecondTableView) {
return mySecondTableViewHeight;
}
return 0;
}
答案 2 :(得分:0)
是的。 但你必须投入一些工作才能让这种方式得到清洁。
首先,我建议构建一个Controller对象,它有两个UITableViewController对象作为属性。
这些将管理表格视图。
您可以为每个表视图控制器分配数据源和代理。
@interface TableViewManager:NSObject { UITableViewController * myTableViewController1; UITableViewController * myTableViewController2; }
@property(nonatomic,retain)UITableViewController * myTableViewController1; @property(非原子,保留)UITableViewController * myTableViewController2;
//这些将手动实现以委派给相应的TableVC @property(nonatomic,assign)id myTableViewDelegate1; @property(nonatomic,assign)id myTableViewDelegate2; @property(nonatomic,assign)id myTableViewDataSource1; @property(nonatomic,assign)id myTableViewDataSource2;
@end
@implementation
@synthesize myTableViewController1,myTableViewController2;
(id)init { if((self = [super init])) { //实际上,您可以通过定义类似UITableViewController的对象将这些行带到nib。 self.myTableViewController1 = [UITableViewController alloc] initWithStyle:ITableViewStylePlain]; self.myTableViewController1 = [UITableViewController alloc] initWithStyle:ITableViewStylePlain]; }
回归自我; }
// 1个setter的示例,其余的assign-properties将类似 - (void)setMyTableViewDelegate1:(id)aDelegate { self.myTableViewController1.delegate = aDelegate; }
(void)dealloc { self.myTableViewDelegate1 = nil; self.myTableViewDelegate2 = nil; self.myTableViewDataSource1 = nil; self.myTableViewDataSource2 = nil;
self.myTableViewController1 = nil; self.myTableViewController2 = nil;
[super dealloc]; }
@end
在初始化该类之后,您可以通过应用addSubview:消息将每个表视图控制器中的tableViews分配给您的UIView。
你有一个干净的结构的好处,没有膨胀的类的问题。
如果您想要和/或需要它,您可以定义自己的UITableViewController自定义类并根据需要进行修改,例如它使用UITableView的自定义派生。