1

番号ダイヤルテキストフィールド、つまり、その隣にあるNSStepperと連動するテキストフィールドを作成しようとしています。

テキストフィールドには浮動小数点数が表示され、ユーザーはスクロールホイールを使用して、表示されている数値と上下の矢印キーを同じ効果で調整できるようにする必要があります。

また、押された修飾キーに応じて、異なる増分に切り替える必要があります。後で、ユーザーがAltキーを押しながらテキストフィールド上でマウスを左または右にドラッグすると、挿入カレットが配置された場所(数字のどの桁)が決定され、ユーザーがその数字のみをインクリメントする動作を実装する可能性があります。 1、数十、数百などのパーツをすばやく更新できます。

修飾キーとマウスドラッグの詳細はそれだけですが、私の質問は、これを最も目立たない方法で実現するための基本事項に関係しているため、バインディングやその他の機能は引き続き機能します。

これまでのところ、NSTextFieldのサブクラス(IBのセルに番号フォーマッターがアタッチされている)と、番号ダイヤルテキストフィールドのフィールドエディターであるNSTextViewのサブクラスを取得しました。これは、keyDown:をオーバーライドして、矢印キーの更新を実行できるようにするためです。

問題は、ウィンドウのデリゲートのwindowWillReturnFieldEditor:toObject:から番号ダイヤルテキストフィールドに対してこのフィールドエディタを返すと、バインディングが壊れているように見え、通常、これを行うべきではないように感じることです。

私はこれを間違った方法で行っていますか?

PS:サブクラスコードだけをhttp://gist.github.com/361265で見つけることができます 。すべてをここに投稿する必要があるかどうかはわかりませんでした。

4

1 に答える 1

0

私は過去にこれを使用しました。まず、次のように tel: URL 形式で番号をフォーマットします。

NSString *numberString = [@"tel://" stringByAppendingString:self.phoneLabel.text];

次に、私がしたこと (私の実装には静的な UITableView が含まれていたため、ユーザーが触れた行を確認し、次のようにしました。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *numberString = [@"tel://" stringByAppendingString:self.phoneLabel.text];

    switch (indexPath.row) {
        case 3:
            // Phone Number Field Pressed
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:numberString]];
            break;
        case 4:
            // Send email using MailComposer
            if ([MFMailComposeViewController canSendMail]) {

                MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init];
                mailViewController.mailComposeDelegate = self;
                [mailViewController setToRecipients:[NSArray arrayWithObject:self.emailLabel.text]];
                [mailViewController setSubject:@""];
                [mailViewController setMessageBody:@"" isHTML:NO];

                [self presentModalViewController:mailViewController animated:YES];

            }
            break;
        default:
            break;
    }

}

これはいくつかの方法で実装できますが、tel: 形式を使用してから OpenUrl メソッドを呼び出すと、私にとっては非常にうまく機能しました。

于 2011-12-13T01:03:59.280 に答える