0

2つのテキストフィールドがあります。1つは幅用、もう1つは高さ用です。

開始値が1080x720であるとします。ユーザーが720を360に変更した場合、1080を540に自動的に変更します。

それを行うための最良の方法は何ですか?

4

2 に答える 2

1

数値フォーマッターをペン先に追加し、フィールドを整数値に制限するように構成し、コントローラーを両方のテキストフィールドのデリゲートとして指定します。

また、ビューを表示するときに、初期値を入力してテキストフィールドを更新する必要があります。このバージョンは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 に答える