Cocoa:禁用视图中所有控件的最佳方法

pep*_*psi 9 macos user-interface cocoa objective-c

在OS X应用程序中,我在滚动视图中都有各种文本字段,按钮和其他控件.有没有办法一次性禁用滚动视图中的元素?

我想避免调用setEnabled:每个项目,如果我想稍后在滚动视图中添加更多控件,那么维护会更容易.

我想强调的是,这适用于OS X应用程序,因此在iOS中运行的技术不一定适用于此处.

CRD*_*CRD 5

您可以使用绑定轻松完成此类任务.您必须在XIB中有一个控制器类的实例用于以下步骤,但该技术不需要这样 - 如果您愿意,可以以编程方式进行设置.

  1. BOOL比如,向控制器类添加属性scrollItemsEnabled
  2. 在Xcode 4的IB/Designer窗格中打开您的XIB
  3. 对于您希望启用/禁用的每个控制器,选择它并在检查器的绑定窗格中链接EnabledscrollItemsEnabled控制器类实例的属性的绑定
  4. 现在,在您的代码设置中,属性将启用/禁用所有项目


Ahm*_*dal 5

为了记录,这里是我在Cocoa应用程序中使用的NSView类别:https:
//github.com/ardalahmet/DisableSubviews

它可以轻松地立即启用/禁用子视图,并且还提供了很大的灵活性.
你可以打这样的电话:

[scrollView disableSubviews:YES];

[self.window.contentView disableSubviews:YES
                                  ofType:[NSTextField class]];

[someView disableSubviews:YES
                   filter:^BOOL (NSView *v) {
                       return [v isKindOfClass:[NSTextField class]] &&
                              (((NSTextField *) v).stringValue.length < 1);
                   }];

[otherView disableSubviews:disable
                  startTag:3
                    endTag:7];
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.


Mr.*_*rna 4

您可以迭代所有subviews内容视图,并调用setEnabled:所有内容视图。这可能会通过禁用某些内部视图来破坏滚动视图,因此不要迭代subview滚动视图本身的属性。要防止调用setEnabled:没有启用属性的视图,请使用respondsToSelector:@selector(setEnabled:)to check。