【问题标题】:how can i disable user touch of a UIbarbutton without disabling?如何在不禁用的情况下禁用用户对 UIbarbutton 的触摸?
【发布时间】:2011-06-02 09:43:54
【问题描述】:

我的工具栏中有一个 UiBarButton 项。我需要停用用户触摸交互 用户界面按钮。它没有 setUserInteractionEnabled 属性。当我隐藏它时,没有适当的可见性。谁能告诉我如何禁用 UIbarbutton 的用户触摸交互而不禁用它?

【问题讨论】:

  • 您好克里斯蒂娜,您可以查看我在下面发布的答案。使用 UIBarButtonItem。

标签: iphone objective-c xcode uibarbuttonitem


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你可以这样做:

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

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

    【讨论】:

    • 谢谢,节省了我一些时间。我认为仅将操作设置为 nil 也会禁用它。
    【解决方案3】:

    你总是可以这样做的:

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

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

    【讨论】:

    • 没有 removeTarget:nil action:NULL forControlEvents:UIControlEventAllEvents]; uibarbutton的方法
    【解决方案4】:

    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;
    

    斯威夫特 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]
    

    【讨论】:

      【解决方案5】:

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

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

      -(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
      }
      

      这不会禁用按钮,但会阻止用户在您不希望他们与之交互时与之交互。

      【讨论】:

        【解决方案6】:

        您分配初始化自定义 UILabel 作为 UIBarbuttonItem (如何?看到这个post)没有文本,它应该足够大以覆盖您要禁用的 UIBarbuttonItem。它对我有用。

        【讨论】:

          【解决方案7】:

          您可以在这里找到答案。

          在 .h 文件中:

          IBOutlet UIBarButtonItem *button1;
          

          在 .m 文件中:

          [button1 setEnabled:FALSE];
          

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

          如果您需要更多帮助,请告诉我。

          【讨论】:

          • 他特别说“没有禁用它”
          • UIBarButtonItem 没有 userInteractionEnabled 属性。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-06
          • 1970-01-01
          • 2019-02-12
          • 1970-01-01
          • 1970-01-01
          • 2020-11-07
          相关资源
          最近更新 更多