如何禁用用户触摸UIbarbutton而不禁用?

时间:2011-06-02 09:43:54

标签: iphone objective-c xcode uibarbuttonitem

我的工具栏中有一个UiBarButton项目。我需要停用用户触摸交互 UiBarButton。它没有 setUserInteractionEnabled 属性。当我隐藏它时,没有适当的可见性。任何人都可以告诉我如何禁用UIbarbutton的用户触摸交互而不禁用它?

7 个答案:

答案 0 :(得分: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];
  ...
}

答案 1 :(得分:4)

你可以这样做:

[barButtonItem setTarget:nil];
[barButtonItem setAction:nil];

按钮看起来已启用,但不会接收任何触摸事件。

答案 2 :(得分:2)

你总是可以这样做:

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

这将删除与按钮关联的所有操作和目标。

答案 3 :(得分:1)

制作与您的按钮相关联的自定义属性。

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

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

创建一个实例变量,例如BOOL interactionEnabled;,并在viewDidLoad或其他init方法中将其设置为YES

interactionEnabled = YES;

当您需要停用按钮互动时,只需将其设置为NO

即可
interactionEnabled = NO;

在按下按钮时触发的方法中,只需添加一个if条件检查以查看interactionEnabled的状态,如下所示:

-(IBAction)fireOnButtonPress:(id)sender {
    if(interactionEnabled) {
        // do something
    }
    // otherwise ignore button press
}

这不会禁用该按钮,但会阻止用户在不需要时与其进行交互。

答案 4 :(得分:0)

你将一个自定义的UILabel作为UIBarbuttonItem(如何?看到这个post)而没有文本,它应该足够大,以覆盖你想要禁用的UIBarbuttonItem。它对我有用。

答案 5 :(得分:0)

对象 -

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]

答案 6 :(得分:-3)

你可以在这里找到答案。

在.h文件中:

IBOutlet UIBarButtonItem *button1;

在.m文件中:

[button1 setEnabled:FALSE];

在.h文件中创建UIBarButtonItem作为IBOutlet并在实现文件中访问,您可以使用UIBarButtonItem的问题 - “setEnabled”使其启用或禁用。

如果您需要更多帮助,请与我联系。