如何在不禁用UIBarButton的情况下禁用用户触摸?

5

在我的工具栏中有一个 UiBarButton 项目。我需要禁用用户的触摸交互。但是它没有 setUserInteractionEnabled 属性。当我隐藏它时,可见性不正确。请问有人能告诉我如何在不禁用 UIbarbutton 的情况下禁用用户的触摸交互吗?


你好,Christina。你可以查看我下面发布的答案。使用UIBarButtonItem。 - AppAspect
7个回答

5

要在UIToolBar中添加标题,请向工具栏添加UIBarButtonItem,然后将其customView属性设置为UILabel。然后您可以设置标签的文本,而不会有任何突出显示等效果。

// In @interface section:
@property (weak, nonatomic) IBOutlet UIBarButtonItem *titleButtonItem;

// In @implementation section:
- (void)viewDidLoad {
  ...
  UILabel *titleLabel = [[UILabel alloc] init];
  self.titleButtonItem.customView = titleLabel;
  titleLabel.text = @"Some Title Text";
  [titleLabel sizeToFit];
  ...
}

3
你可以这样做:
[barButtonItem setTarget:nil];
[barButtonItem setAction:nil];

谢谢,这节省了我一些时间。我认为仅将操作设置为nil也会禁用它。 - Oleg Sherman

2

您总是可以做到以下几点:

[yourbutton removeTarget:nil 
                  action:NULL 
        forControlEvents:UIControlEventAllEvents]; 

那将会移除与按钮相关的所有操作和目标。

4
对于UIBarButton,没有removeTarget:nil和action:NULL的方法可以移除所有事件。 - Vipin

2

Obj - c

UIButton *barButton = [UIButton buttonWithType:UIButtonTypeCustom];
[barButton setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal];
[barButton setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateDisabled];
barButton.frame = CGRectMake(10.0,10.0,50,50);
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:aButton];
backButton.enabled = NO;
self.navigationItem.leftBarButtonItem = backButton;

Swift 4

按钮图片

let barButton = UIButton(type: .custom)
    barButton.setImage(UIImage(named: "image.png"), for: .normal)
    barButton.setImage(UIImage(named: "image.png"), for: .disabled)
    barButton.frame = CGRect(x: 10.0, y: 10.0, width: 50, height: 50)
    let backButton = UIBarButtonItem(customView: aButton)
    backButton.isEnabled = false
    navigationItem.leftBarButtonItem = backButton

按钮标题

let btnTitle = UIBarButtonItem(title: "Your Button title", style: .plain, target: nil, action:nil)
    btnTitle.setTitleTextAttributes([NSAttributedStringKey.font: UIFont(name: "fontname", size: 14.0)!], for: .normal)
    btnTitle.setTitleTextAttributes([NSAttributedStringKey.font: UIFont(name: "fontname", size: 14.0)!], for: .disabled)
    btnTitle.isEnabled = false
    self.navigationItem.leftBarButtonItems = [btnTitle]

1

创建一个与您的按钮相关联的自定义属性。

假设您的按钮触发以下操作:

-(IBAction)fireOnButtonPress:(id)sender {
    // do something
}

在您的代码中创建一个实例变量,例如BOOL interactionEnabled;,并在您的viewDidLoad或其他初始化方法中将其设置为YES
interactionEnabled = YES;

当您需要禁用按钮交互时,只需将其设置为NO
interactionEnabled = NO;

在当按下按钮时被调用的方法中,只需添加一个 if 条件检查来查看 interactionEnabled 的状态,像这样:
-(IBAction)fireOnButtonPress:(id)sender {
    if(interactionEnabled) {
        // do something
    }
    // otherwise ignore button press
}

这不会禁用按钮,但当您不希望用户与其交互时,它将防止用户与其交互。


0

您可以使用alloc-init方法创建一个自定义的UILabel,并将其作为UIBarbuttonItem(如何实现?请参考post)使用,这样它就没有任何文本,且大小足够大以覆盖您想要禁用的UIBarbuttonItem。对我来说这个方法有效。


-3

您可以在这里找到您的答案。

在 .h 文件中:

IBOutlet UIBarButtonItem *button1;

在.m文件中:
[button1 setEnabled:FALSE];

在.h文件中创建UIBarButtonItem作为IBOutlet,并在实现文件中访问,您可以使用UIBarButtonItem的属性“setEnabled”来启用或禁用它。
如果需要更多帮助,请告诉我。

1
他明确表示“不禁用它”。 - Lance
UIBarButtonItem没有userInteractionEnabled属性。 - Lance

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接