2つのテキストフィールドがあります。1つは幅用、もう1つは高さ用です。
開始値が1080x720であるとします。ユーザーが720を360に変更した場合、1080を540に自動的に変更します。
それを行うための最良の方法は何ですか?
2つのテキストフィールドがあります。1つは幅用、もう1つは高さ用です。
開始値が1080x720であるとします。ユーザーが720を360に変更した場合、1080を540に自動的に変更します。
それを行うための最良の方法は何ですか?
数値フォーマッターをペン先に追加し、フィールドを整数値に制限するように構成し、コントローラーを両方のテキストフィールドのデリゲートとして指定します。
また、ビューを表示するときに、初期値を入力してテキストフィールドを更新する必要があります。このバージョンは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に偶数のみを使用させる組み込みオプションはありません。