1

我正在尝试创建一个号码拨号文本字段,即与旁边的 NSStepper 一起工作的文本字段。

文本字段应该显示浮动,并允许用户使用滚轮来调整它显示的数字以及向上和向下箭头键以达到相同的效果。

它还应该根据按下的修饰键切换到不同的增量。稍后我可能会实现一种行为,当用户在按下 alt 的同时将鼠标向左或向右拖动到文本字段上时,它将确定插入插入符号的位置(在数字的哪个数字),并且只增加该数字,以便用户可以快速更新个、十、百等部分。

虽然修饰键和鼠标拖动细节只是细节,但我的问题更关注以最不显眼的方式实现这一点的基本原理,以便绑定和其他功能仍然可以继续工作。

到目前为止,我得到了一个 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 回答