禁用表格视图中

时间:2015-07-04 15:06:14

标签: ios objective-c uitableview user-interaction

我有一个tableview和一个用于按钮的视图。 我想禁用tableview中所有子视图的用户交互,但不应禁用滚动查看tableview。 点击'预览'按钮。 不应禁用按钮视图。 建议欢迎。  我尝试了以下内容。但这并不能实现滚动或按钮交互。

    - (IBAction)btnPreviewTapped:(id)sender {
for (UIView *eachView in self.view.superview.subviews) {
    if (eachView != formsContentTableView) {
        eachView.userInteractionEnabled = NO;
    }
}
formsContentTableView.userInteractionEnabled = YES;
self.buttonView.userInteractionEnabled = YES;
[self.btnPreview setTitle:@"Submit" forState:UIControlStateNormal];

}

2 个答案:

答案 0 :(得分:1)

我会创建一个属性@property (nonatomic, assign) BOOL isPreview;,将其指定为初始值self.isPreview = NO;,然后在创建单元子视图时在-tableView:cellForRowAtIndexPath:中,我会检查

if(self.isPreview) { 
    subview1.userInteractionEnabled = NO; 
    subview2.userInteractionEnabled = NO;
    // ... etc 
}

然后在您的IBAction中设置如下:

-(IBAction)btnPreviewTapped:(id)sender {
    if(self.isPreview) {
        self.isPreview = NO;
    } else {
        self.isPreview = YES;
    }
    [self.tableView reloadData];
}

-reloadData方法会重新绘制可见单元格及其子视图,但根据self.isPreview,子视图将会或不会对用户的触摸作出反应。

答案 1 :(得分:0)

基于所建议的内容找到了另一种解决方案,这种解决方案无法用于禁用内容视图中组件的用户交互,但会禁用didSelectRowAtIndexPath,这也是预期的。

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   if(self.bIsPreview)
      return nil;
 else
return indexPath;
}