ios - 如何在 objective-c 中禁用以编程方式创建的 UIBarButtonItem?

标签 ios objective-c toolbar uibarbuttonitem

我以编程方式创建了一个工具栏,并在工具栏中也以编程方式添加了四个 UIBarButtonItem。当 TextView 开始编辑时,此按钮将出现,如果 TextView 中没有文本清除按钮和翻译按钮将禁用。这是我的四个按钮创建代码。

UIToolbar* numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
numberToolbar.backgroundColor = [UIColor lightGrayColor];

numberToolbar.items = [NSArray arrayWithObjects:
                       [[UIBarButtonItem alloc]initWithTitle:@"Hide" style:UIBarButtonItemStyleDone target:self action:@selector(cancelKeyboard)],
                       [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
                       [[UIBarButtonItem alloc]initWithTitle:@"Clear" style:UIBarButtonItemStyleDone target:self action:@selector(clearTextView)],
                       [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
                       [[UIBarButtonItem alloc]initWithTitle:@"Paste" style:UIBarButtonItemStyleDone target:self action:@selector(paste)],
                       [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
                       [[UIBarButtonItem alloc]initWithTitle:@"Translate" style:UIBarButtonItemStyleDone target:self action:@selector(translate)],
                       nil];
[numberToolbar sizeToFit];
_sorceTextview.inputAccessoryView = numberToolbar;
_sorceTextview.autocorrectionType = UITextAutocorrectionTypeNo;

现在我如何禁用清除和翻译按钮:
-(BOOL)textViewShouldBeginEditing:(UITextView *)textView {} 

方法?请帮忙。

最佳答案

为这些按钮使用实例变量。然后你可以设置enabled属性(property)根据需要。

@implementation MyViewController {
    UIBarButtonItem *_btnClear;
    UIBarButtonItem *_btnTranslate;
}

然后在您的工具栏设置代码中:
_btnClear = [[UIBarButtonItem alloc]initWithTitle:@"Clear" style:UIBarButtonItemStyleDone target:self action:@selector(clearTextView)];
_btnTranslate = [[UIBarButtonItem alloc]initWithTitle:@"Translate" style:UIBarButtonItemStyleDone target:self action:@selector(translate)];
UIBarButtonItem *flex = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

numberToolbar.items = @[
                       [[UIBarButtonItem alloc]initWithTitle:@"Hide" style:UIBarButtonItemStyleDone target:self action:@selector(cancelKeyboard)],
                       flex,
                       _btnClear,
                       flex,
                       [[UIBarButtonItem alloc]initWithTitle:@"Paste" style:UIBarButtonItemStyleDone target:self action:@selector(paste)],
                       flex,
                       _btnTranslate
                       ];

然后在需要禁用的任何地方都可以执行以下操作:
_btnClear.enabled = NO;

并启用:
_btnClear.enabled = YES;

关于ios - 如何在 objective-c 中禁用以编程方式创建的 UIBarButtonItem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40078949/

相关文章:

ios - 尝试使用 AlertView 推送到另一个 View Controller

ios - 你如何重新描边到另一种颜色的路径并得到完全相同的结果?

ios - 解析 PFFile progressBlock :^(int percentDone) { } is not getting called

ios - NSOperationQueue 的 addOperation : operation is finished and cannot be enqueued?

ios - 如何让工具栏保持在顶部,就像 iPhone 上的 map 应用程序一样?

table 下的 cocoa 迷你工具栏(添加、删除)

java - 将工具栏设置为 fragment 中的操作栏

设置 subview 的layer.cornerRadius后,iOS UITableView滚动不流畅

iphone - IOS 上 UITableView 的 EXC_BAD_ACCESS

objective-c - 标签栏中的自定义 View 在 iOS6 中不再起作用