使用UITableView重复操作UIView

时间:2015-10-28 16:41:27

标签: ios objective-c uitableview uiview uiscrollview

我在主视图中有表格。接下来我将视图添加到上面的表格视图中,高度为100点,然后我有第一行高度为100点。接下来,我检查scrollView contentOffset以重新计算添加的视图的位置。当我滚动表格视图时,我的视图与表格视图中的第一个单元格重复。

但我有问题是: 当我想从我的视图(手指在视图中)滚动并向下滚动时,表格视图与我的手势没有交互。是的,这是正常的。如果我将用户交互设置为NO,则一切正常。但是我在此视图中有一些按钮,当我禁用用户交互时,我无法在此视图中对子视图执行操作。

如何在没有用户交互或其他方法的情况下同时/一起滚动和点按。 THX。

所有代码:

#import "ViewController.h"

@interface ViewController () <UITableViewDataSource, UITableViewDelegate>
{
    UIView *someView;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
    tableView.dataSource = self;
    tableView.delegate = self;
    [self.view addSubview:tableView];


    someView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 100)];
    someView.backgroundColor = [UIColor redColor];
    [self.view addSubview:someView];

}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return 10;
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath{
    if (indexPath.row == 0) return 100;
    else return 44;
}

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
        if (indexPath.row == 0) cell.backgroundColor = [UIColor greenColor];
    }

    return cell;
}

-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
    someView.center = CGPointMake(someView.center.x, -scrollView.contentOffset.y+50);
}

1 个答案:

答案 0 :(得分:1)

尝试在主视图上添加按钮

- (BOOL)pointInside:(CGPoint)point withEvent:(nullable UIEvent *)event{
   for(UIView *subview in self.subviews){       
       if([subview pointInside:point withEvent:event]){
           return YES;
       }
   }
   return NO;
}

在这种情况下,表格不会仅在按钮

下面进行交互

第二种方式是为someView和override方法创建子类pointInside:

{{1}}