禁用表视图中所有子视图的用户交互
Disabling the user interaction of all subviews within a tableview
我有一个表格视图和一个位于其下方的按钮视图。
我想禁用 tableview 中所有子视图的用户交互,但是不应禁用 tableview 的滚动。
单击 'Preview' 按钮时需要这样做。
不应禁用按钮视图。
欢迎提出建议。
我尝试了以下。但这不会启用滚动或按钮交互。
- (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];
}
我会创建一个 属性 @property (nonatomic, assign) BOOL isPreview;
,将其分配为 NO 作为初始值 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
子视图是否会对用户的触摸做出反应。
根据建议找到了另一个解决方案,该解决方案不适用于禁用内容视图中组件的用户交互,但会禁用 didSelectRowAtIndexPath,这也是预期的。
-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if(self.bIsPreview)
return nil;
else
return indexPath;
}
我有一个表格视图和一个位于其下方的按钮视图。 我想禁用 tableview 中所有子视图的用户交互,但是不应禁用 tableview 的滚动。 单击 'Preview' 按钮时需要这样做。 不应禁用按钮视图。 欢迎提出建议。 我尝试了以下。但这不会启用滚动或按钮交互。
- (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];
}
我会创建一个 属性 @property (nonatomic, assign) BOOL isPreview;
,将其分配为 NO 作为初始值 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
子视图是否会对用户的触摸做出反应。
根据建议找到了另一个解决方案,该解决方案不适用于禁用内容视图中组件的用户交互,但会禁用 didSelectRowAtIndexPath,这也是预期的。
-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if(self.bIsPreview)
return nil;
else
return indexPath;
}