我有两个文本字段:一个用于宽度,一个用于高度。
假设起始值是 1080 x 720。如果用户将 720 更改为 360,我想自动将 1080 更改为 540。
最好的方法是什么?
我有两个文本字段:一个用于宽度,一个用于高度。
假设起始值是 1080 x 720。如果用户将 720 更改为 360,我想自动将 1080 更改为 540。
最好的方法是什么?
向您的 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;
}
}
对于第一个问题,只需计算比率(除以另一个):1080 是 720 的 1.5 倍,因此如果用户将 720 更改为 360,只需执行 360*1.5 即可获得值(反之亦然 540/1.5 以获得值如果用户更改了 1080,则为 720)。
没有嵌入式选项可以让 NSTextField 只取偶数。