UITableView以编程方式在UIScrollView中不调用委托方法

时间:2015-04-01 14:21:18

标签: ios objective-c iphone uitableview uiscrollview

我正在尝试使用以下代码在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没有响应任何委托方法..任何想法??

2 个答案:

答案 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,因此调用了委托方法:

delegateCalled

按下带有标签1的tableView时,应用程序看起来像这样:

tableView1