首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在NSMutableArray中启用/禁用基于计数的按钮

在NSMutableArray中启用/禁用基于计数的按钮
EN

Stack Overflow用户
提问于 2015-05-21 15:19:58
回答 2查看 1.5K关注 0票数 0

我有一个带有按钮的视图控制器,如果是myArray.count > 0,我想启用它。我让KVO开始工作,但没有更新。

我的按钮属性在这里声明:

代码语言:javascript
复制
@property (strong, nonatomic) IBOutlet UIBarButtonItem *saveButton;

我想根据数组中项的计数启用/禁用该按钮:

代码语言:javascript
复制
@property (nonatomic, strong) NSMutableArray *myArray;

项通过didSelectRowAtIndexPath添加/移除到数组中。

我发现了几篇关于观察NSMutableArray的文章,我看到的每一篇文章似乎都有大量的代码来实现如此简单的东西。

在实例化viewDidLoad之后,我将其添加到myArray中:

代码语言:javascript
复制
// Add KVO for array
[self.saveButton addObserver:self forKeyPath:@"myArray" options:(NSKeyValueObservingOptionInitial) context:nil];

我添加此方法是为了在myArray发生更改时执行一些操作

代码语言:javascript
复制
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if ([keyPath isEqualToString:@"myArray"]) {
        if (self.myArray.count > 0) {
            NSLog(@"KVO: myArray.count > 0");
            [self.saveButton setEnabled:YES];
        } else {
            NSLog(@"KVO: myArray.count is ZERO");
            [self.saveButton setEnabled:NO];
        }
    }
}

我知道我错过了一些简单的东西,但事实证明是难以捉摸的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-21 15:26:06

如果只能通过didSelectRowAtIndexPath编辑数组,那么为什么不只是启用/禁用那里的按钮呢?

代码语言:javascript
复制
 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath  {
    //current code    

    if (self.myArray.count > 0) {
        NSLog(@"KVO: myArray.count > 0");
        [self.saveButton setEnabled:YES];
    } else {
        NSLog(@"KVO: myArray.count is ZERO");
        [self.saveButton setEnabled:NO];
    }
}
票数 1
EN

Stack Overflow用户

发布于 2015-05-21 16:05:26

问题是,NSMutableArray不尊重KVO,因此,如果正确访问数组,则观察关键路径计数不会使work.This工作:

代码语言:javascript
复制
something = [self mutableArrayValueForKey:@"a"]; 
[something addObject:foo];

你可以在这里得到答案:KVO With NSMutableArray

Observing count in NSMutableArray

关于NSMutableArray中的中文观察计数,您可以在以下网址上得到答复:

变化

代码语言:javascript
复制
// Add KVO for array
[self.saveButton addObserver:self forKeyPath:@"myArray" options:(NSKeyValueObservingOptionInitial) context:nil];

代码语言:javascript
复制
// Add KVO for array
[self addObserver:self forKeyPath:@"myArray" options:(NSKeyValueObservingOptionInitial) context:nil];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30377912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档