1

我有两个按钮——“插入行”和“删除行”,通过界面生成器创建。

当我的表中有 0 行时,我希望“删除行”按钮变灰。

有人告诉我禁用按钮的方法是 - [button setEnabled:no] 或取消勾选界面生成器中的“启用”框。但是,这两种情况都不适合我。

有什么建议么?

4

6 回答 6

1

在 .h 文件中为您的按钮创建一个 IBOutlet 为

AppDelegate.h


{
    IBOutlet NSButton* yourButton;
}

然后 ctrl+从 xib 中的按钮拖动到 FileOwner/AppDelegate 并将按钮的引用出口连接到 AppDelegate 类中的 yourButton。

现在,如果您正在使用数据源方法填充表视图,请实现

AppDelegate.m

- (NSInteger) numberOfRowsInTableView:(NSTableView *)tableView;
{
    if(![yourArray count])
    {
        [yourButton setEnabled:NO];
    }
    else
    {
        [yourButton setEnabled:YES];
    }
    return [yourArray count];
}
于 2013-10-21T06:11:23.793 回答
0

如果您通过绑定填充表视图,这是您可以尝试的片段

if(![[arrayController arrangedObjects] count])
        {
            [button setEnabled:YES];
        }
        else
        {
            [button setEnabled:NO];
        }

其中 arraycontroller 是 XIB 中内容数组的 NSArrayconrtoller 的出口。

于 2013-10-21T05:31:37.463 回答
0

您应该将 UIButtonType 和 UIButton setTitle 设置为默认灰色。例如程序应该像

 UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
 [button setTitle:@"delete row" forState:UIControlStateNormal];
 button.enabled = NO;
 button.frame = CGRectMake(20, 20, 100, 100);

如果您为 UIButton 设置背景图像。您需要设置自定义 UIImage 以启用和禁用。

[button setBackgroundImage:[UIImage imageNamed:@"enable.png"] 
                  forState:UIControlStateNormal];

[button setBackgroundImage:[UIImage imageNamed:@"disable.png"] 
                  forState:UIControlStateDisabled];
于 2013-10-20T16:25:15.190 回答
0

如果您已完成按钮的绑定,请遵循以下绑定。为此,您需要将按钮绑定到 Enable property -> Array Controller -> Selection ->
Model Keypath -> "@count"

于 2013-10-20T16:31:24.607 回答
0

可能您绑定到数组控制器。然后可以将删除按钮的 enabled 属性绑定到数组控制器的 canRemove 属性上。

于 2013-10-20T18:42:17.240 回答
0

您确定 [button setEnabled:NO] 不会禁用该按钮吗?您需要为其禁用状态设置不同的视觉样式,使其看起来已禁用。尝试通过点击按钮来测试按钮是否已启用。

于 2013-10-20T16:07:29.733 回答