对NSTextField进行子类化以创建数字拨号文本字段

时间:2010-04-09 15:26:44

标签: objective-c cocoa nstextfield fieldeditor

我正在尝试创建一个数字拨号文本字段,即一个与坐在它旁边的NSStepper一起使用的文本字段。

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

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

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

到目前为止,我有一个NSTextField的子类(在IB的单元格中附加了一个数字格式化程序)和一个NSTextView的子类,用作数字拨号文本字段的字段编辑器。这样我就可以覆盖keyDown:使箭头键更新发生。

问题是从窗口委托的windowWillReturnFieldEditor:toObject:返回数字拨号文本字段的字段编辑器似乎打破了绑定,并且通常觉得我不应该这样做。

我是以错误的方式解决这个问题吗?

PS:您可以在http://gist.github.com/361265找到子类代码 我不确定我是否应该在这里发布。

1 个答案:

答案 0 :(得分: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方法对我来说非常有用。