添加布尔值的观察者

发布于 2024-12-10 17:35:34 字数 730 浏览 1 评论 0原文

我正在尝试向对象添加观察者并通过更改它的布尔值来触发它。

代码: 添加观察者:

[unitsCellViewController.cell addObserver:self forKeyPath:@"unit" options:0 context:nil];

在对象中,当文本字段发生变化时,我将更改布尔值并尝试触发通知:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if ([string length] != 0)
    {
        NSRange match = [@"0123456789" rangeOfString:string];
        if (match.location == NSNotFound) {
            return NO;
        }
    }

    [self willChangeValueForKey:@"unit"];
    self.on = !on;
    [self didChangeValueForKey:@"unit"];

    return YES;
}

但这不起作用,值确实发生了变化,但观察者没有被触发。 我这样做正确吗?如果没有,如何在文本字段更改时触发事件?

I am trying to add an observer to an object and trigger it by changing it boolean value.

Code:
Add Observer:

[unitsCellViewController.cell addObserver:self forKeyPath:@"unit" options:0 context:nil];

In the object, when the textfield is changing, I will change the boolean value and try to trigger the notification:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if ([string length] != 0)
    {
        NSRange match = [@"0123456789" rangeOfString:string];
        if (match.location == NSNotFound) {
            return NO;
        }
    }

    [self willChangeValueForKey:@"unit"];
    self.on = !on;
    [self didChangeValueForKey:@"unit"];

    return YES;
}

but this is not working, the value did get changed, but the observer is not triggered.
Am I doing this correctly? If not, how can I trigger the event when the textfield is changed?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

失与倦" 2024-12-17 17:35:34

您可以使用属性,并覆盖 setter

在 .h 中

@property (nonatomic, assign) BOOL myFlag;

在 .m 中

@implementation

@synthesize myFlag = _myFlag;
...
..
.


- (void)setMyFlag:(BOOL)myFlag
{
if(myFlag != _myFlag){
_myFlag = myFlag;
[self postNotification];
}
}


-(void)postNofitication
{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"nameOfNotification" object:nil];
}

并且当标志的值发生变化时执行操作。

希望这能有所帮助。

You can use a property, and override the setter

In your .h

@property (nonatomic, assign) BOOL myFlag;

In your .m

@implementation

@synthesize myFlag = _myFlag;
...
..
.


- (void)setMyFlag:(BOOL)myFlag
{
if(myFlag != _myFlag){
_myFlag = myFlag;
[self postNotification];
}
}


-(void)postNofitication
{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"nameOfNotification" object:nil];
}

And you perform an action just when the value of the flag change.

Hope this can help.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文