2010-04-09 56 views
1

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

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

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

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

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

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

我该怎么做呢?

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

回答

0

我以前用过这个。首先格式化数字为与电话: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方法对我来说真的很好。