我正在尝试使用以下代码在UIScrollView中加载几个UITableView
int x = 0;
for (int i = 0; i < 14; i++) {
UITableView *testTableView = [[UITableView alloc] initWithFrame:CGRectMake(x, 0, 150, scrollView.bounds.size.height)];
testTableView.dataSource = self;
testTableView.delegate = self;
[testTableView setTag:i];
[testTableView reloadData];
[scrollView addSubview:testTableView];
x+=155;
}
[scrollView setContentSize:CGSizeMake(x, scrollView.bounds.size.height)];
这个问题,uitableview没有响应任何委托方法..任何想法??
答案 0 :(得分:1)
由于tableView 是(继承自)一个scrollView,问题可能是为所有表视图以及父scrollView调用了您的或任何scrollView委托方法。
如果是这种情况,您应该在委托方法中执行检查。例如
- (void)scrollViewDidScroll: (UIScrollView *)scrollView
{
if ([scrollView isEqual:tableView1]){
}else if ([scrollView isEqual:tableView2]){
}else if ([scrollView isEqual:parentScrollView]){
}
}
修改强>
回答你的评论&#34;我应该如何使UITableView调用UITabelView委托方法而不是scrollview委托方法&#34;
它并没有真正发挥作用。设置testTableView.delegate = self;
时,您还设置了tableViews scrollView委托。这意味着,例如,当tableView滚动时,将调用相应的scrollView委托方法。
据我所知,你所要求的方法是检查你所有的委托方法
if ([scrollView isEqual:parentScrollView]){
//do all parentScrollView related things
}
这样,当表视图调用委托方法时,它将不执行任何操作
有关继承协议的更多信息,请参阅here。
答案 1 :(得分:0)
将他们绑在房产上:
@property (nonatomic, strong) UITableView *tableView1;
@property (nonatomic, strong) UITableView *tableView2;
@property (nonatomic, strong) UITableView *tableView3;
//etc...
然后在你的for循环中决定要附加的东西是什么属性:
if (x == 1)
self.tableView1 = testTableView;
else if (x == 2)
self.tableView2 = testTableView;
在绑定它们之后,在属性上将委托设置为self。
self.tableView1.delegate = self;
还要确保您的ViewController可以从UITableView接收委托调用:
@interface ViewController () <UITableViewDataSource, UITableViewDelegate>
- 编辑 -
此图显示了适合我的代码。我在tableView上按了一行标签1两次并获得了两次NSLog,因此调用了委托方法:
按下带有标签1的tableView时,应用程序看起来像这样: