5

我需要知道如何禁用视图控制器的所有操作。换句话说,视图控制器中的所有对象都将被冻结。作为一种实践,我声明了一个按钮和一些对象,如文本字段、滑块等。然后当按下按钮时,所有对象都不能使用。

我需要禁用此视图控制器的所有活动。

4

5 回答 5

11

您可以通过以下方式简单地禁用视图上的每个子视图;

[self.view setUserInteractionEnabled:NO];
于 2012-10-09T14:11:44.993 回答
0

在您的内部ViewController.h有一些按钮按下事件的功能:

- (IBAction)signInUser:(id)sender;

在你ViewController.m只是引用所有控制器并禁用它们:

- (void)signInUser:(id)sender {
    someControl.enabled = NO;
}

假设您连接了所有IBOutletas 属性并合成了它们。

于 2012-10-09T13:54:14.803 回答
0

设置您的视图结构,以便所有可见视图都包含在另一个 UIView 中。当您想要禁用所有“活动”(假设这意味着所有用户交互)时,请禁用外部视图上的用户交互。请注意,这也会禁用“禁用 UI”按钮。要允许此按钮保持启用状态,请不要将其包含在您的“外部视图”UIView 中。

故事板编辑器中的结构和视图控制器: 在此处输入图像描述

查看控制器标头:

#import <UIKit/UIKit.h>

@interface TestViewController : UIViewController

@property (weak) IBOutlet UIView *outerView;

-(IBAction)disableButtonTapped:(id)sender;

@end

查看“禁用”按钮的控制器实现:

#import "TestViewController.h"

@interface TestViewController ()

@end

@implementation TestViewController


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

-(IBAction)disableButtonTapped:(id)sender{

    self.outerView.userInteractionEnabled = NO;
}

@end
于 2012-10-09T14:21:20.947 回答
0

如果你想禁用导航栏和标签栏,你也可以提供一个透明的视图控制器。这如果冻结您的窗口并且不会让用户与屏幕交互。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
self.presentedVC = [storyboard instantiateViewControllerWithIdentifier:@"BlankViewController"];
self.presentedVC.view.backgroundColor = [UIColor clearColor];
self.presentedVC.modalPresentationStyle = UIModalPresentationCustom;
[self presentViewController:self.presentedVC animated:YES completion:nil];

要再次启用屏幕,只需关闭呈现的VC

[self.presentedVC dismissViewControllerAnimated:YES completion:^{

}];
于 2015-01-08T17:18:39.723 回答
0

巴图的好回答。这是斯威夫特版本。

self.view.isUserInteractionEnabled = false
于 2017-11-13T08:14:37.563 回答