开发者

how can i disable user touch of a UIbarbutton without disabling?

i have a UiBarButton item in my Toolbar.i need to deactivate the user touch interaction in UiBarButton. there is no setUserInteractionEnabled property to it. when i am 开发者_StackOverflow中文版hiding it there is no proper visibility .can any one tell me that how can i disable user touch interaction of a UIbarbutton without disabling it?


To have a title in a UIToolBar, add a UIBarButtonItem to your toolbar and then set its customView property to a UILabel. You can then set the text of the label and not have any highlighting, etc.

// 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];
  ...
}


You can do this:

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

The button looks enabled but it will not receive any touch event.


You can always do:

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

That will remove all actions and targets associated with the button.


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

For Button Image

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

For Button Title

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]


Make a custom property associated with your button.

Let's say your button fires the action below:

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

Make an instance variable such as BOOL interactionEnabled; and in your viewDidLoad or other init method set it to YES

interactionEnabled = YES;

When you need to disable button interaction, simply set it to NO

interactionEnabled = NO;

In your method that is fired when the button is pressed, just add an if-condition checking to see what the state of interactionEnabled is, like so:

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

This won't disable the button, but it will prevent the user from interacting with it when you don't want them to.


You alloc-init a custom UILabel as a UIBarbuttonItem (how? see this post) with no text and it should be large enough to cover the UIBarbuttonItem you want to disable. It worked for me.


You can find your answer here.

In .h File:

IBOutlet UIBarButtonItem *button1;

In .m File:

[button1 setEnabled:FALSE];

Create the UIBarButtonItem as IBOutlet in .h file and access in the implementation file and you can use the problerty of UIBarButtonItem - "setEnabled" to make it enable or disable.

Let me know if you need more help.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜