Objective c 如何使按钮仅在表视图有0行时变为禁用状态?
我有两个按钮-“插入行”和“删除行”,通过界面生成器创建 当我的表中有0行时,我希望“删除行”按钮变灰 我被告知禁用按钮的方法是-[button setEnabled:no]或取消选中interface builder中的“Enabled”框。然而,这两种情况对我都不起作用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
有什么建议吗?您确定[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。您是否解决了问题?请标记正确答案以将此帖子标记为已回答。您解决问题了吗?请标记正确答案,将此帖子标记为已回答。