Objective c 如何使按钮仅在表视图有0行时变为禁用状态?

Objective c 如何使按钮仅在表视图有0行时变为禁用状态?,objective-c,cocoa,interface-builder,nsbutton,Objective C,Cocoa,Interface Builder,Nsbutton,我有两个按钮-“插入行”和“删除行”,通过界面生成器创建 当我的表中有0行时,我希望“删除行”按钮变灰 我被告知禁用按钮的方法是-[button setEnabled:no]或取消选中interface builder中的“Enabled”框。然而,这两种情况对我都不起作用 有什么建议吗?您确定[button setEnabled:NO]没有禁用该按钮吗?您需要为其禁用状态设置不同的视觉样式,以使其看起来处于禁用状态。尝试通过点击按钮来测试按钮是否已启用。您确定[button setEnable

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

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

我被告知禁用按钮的方法是-[button setEnabled:no]或取消选中interface builder中的“Enabled”框。然而,这两种情况对我都不起作用


有什么建议吗?

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

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

您应该将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];

您应该为默认灰显设置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];

如果已完成按钮的绑定,请遵循以下绑定。 为此,您需要绑定按钮以启用属性->阵列控制器->选择->

Model Keypath->“@count”

如果您已经完成了按钮的绑定,请遵循以下绑定。 为此,您需要绑定按钮以启用属性->阵列控制器->选择->

Model Keypath->“@count”

您可能已绑定到阵列控制器。然后,您可以将delete按钮的enabled属性绑定到array controller的canRemove属性。

您可能已经绑定到array controller。然后,您可以将delete按钮的enabled属性绑定到array controller的canRemove属性。

如果您是通过绑定填充表视图,下面是您可以尝试的代码段

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

其中arraycontroller是NSArrayContorToller的出口,在XIB中使用哪个内容数组。

如果您是通过绑定填充表视图,下面是您可以尝试的代码段

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

其中arraycontroller是NSArrayContorToller的出口,XIB中的哪个内容数组。

为.h文件中的按钮创建一个IBOutlet,如下所示:

AppDelegate.h


{
    IBOutlet NSButton* yourButton;
}
然后按住ctrl键并从xib中的按钮拖动到FileOwner/AppDelegate,然后将按钮的引用出口连接到AppDelegate类中的按钮

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

AppDelegate.m

- (NSInteger) numberOfRowsInTableView:(NSTableView *)tableView;
{
    if(![yourArray count])
    {
        [yourButton setEnabled:NO];
    }
    else
    {
        [yourButton setEnabled:YES];
    }
    return [yourArray count];
}

在.h文件中为按钮创建一个IBOutlet,如下所示

AppDelegate.h


{
    IBOutlet NSButton* yourButton;
}
然后按住ctrl键并从xib中的按钮拖动到FileOwner/AppDelegate,然后将按钮的引用出口连接到AppDelegate类中的按钮

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

AppDelegate.m

- (NSInteger) numberOfRowsInTableView:(NSTableView *)tableView;
{
    if(![yourArray count])
    {
        [yourButton setEnabled:NO];
    }
    else
    {
        [yourButton setEnabled:YES];
    }
    return [yourArray count];
}

我真的不知道如何专门为“删除行”按钮调用方法setEnabled,因为我是通过IB创建的。有没有办法找到特定按钮的对象名称,以便我可以使用此“setEnabled”方法?似乎您没有从IB中创建对控制器中按钮的引用。我该怎么做?我真的不知道如何为“delete row”按钮调用方法setEnabled特别是,因为我是通过IB创建的。有没有办法找到该特定按钮的对象名称,以便我可以使用此“setEnabled”方法?似乎您没有从IB创建对控制器中按钮的引用。我该如何执行此操作?如果这也不能解决问题,则还需要绑定NSTableView。将其选择索引绑定到Array Controller.SelectionIndex。如果这也无法解决此问题,则还需要绑定NSTableView。将其选择索引绑定到阵列控制器。SelectionIndex。您是否解决了问题?请标记正确答案以将此帖子标记为已回答。您解决问题了吗?请标记正确答案,将此帖子标记为已回答。