0

我有两个文本字段:一个用于宽度,一个用于高度。

假设起始值是 1080 x 720。如果用户将 720 更改为 360,我想自动将 1080 更改为 540。

最好的方法是什么?

4

2 回答 2

1

向您的 nib 添加一个数字格式化程序,并将其配置为将字段限制为整数值,并将您的控制器指定为两个文本字段的委托。

您还需要在显示视图时填写初始值并更新文本字段。此版本基于 NSPopoverDelegate,但您可以对其进行调整。

@property (assign) NSUInteger width;
@property (assign) NSUInteger height;

-(void)awakeFromNib {
    self.numberFormatter.minimumFractionDigits = 0;
    self.numberFormatter.maximumFractionDigits = 0;
}

-(void)popoverWillShow:(NSNotification *)notification {
    self.width = ___;
    self.height = ___;
    self.widthField.stringValue = @"";
    self.heightField.stringValue = @"";
}

-(void)controlTextDidChange:(NSNotification *)obj {
    NSTextField *sender = obj.object;
    NSTextView *textView = [obj.userInfo objectForKey:@"NSFieldEditor"];
    NSString *stringValue = textView.string;
    NSNumber *numberValue = [self.numberFormatter numberFromString:stringValue];
    if (!stringValue.length || !numberValue) {
        self.resizeButton.enabled = NO;
    } else {
        NSInteger integerValue =
        [[self.numberFormatter numberFromString:stringValue] integerValue];
        if (self.widthField == sender) {
            self.heightField.integerValue =
            self.height * integerValue / self.width;
        } else if (self.heightField == sender) {
            self.widthField.integerValue =
            self.width * integerValue / self.height;
        }
        self.resizeButton.enabled = YES;
    }
}
于 2013-03-14T00:18:23.543 回答
0

对于第一个问题,只需计算比率(除以另一个):1080 是 720 的 1.5 倍,因此如果用户将 720 更改为 360,只需执行 360*1.5 即可获得值(反之亦然 540/1.5 以获得值如果用户更改了 1080,则为 720)。

没有嵌入式选项可以让 NSTextField 只取偶数。

于 2013-03-14T00:05:50.857 回答