2010-04-09 2 views
1

전화 걸기 텍스트 필드, 즉 옆에있는 NSStepper와 함께 작동하는 텍스트 필드를 만들려고합니다.NSTextField를 서브 다이얼링하여 전화 걸기 텍스트 필드 만들기

텍스트 필드에는 수레가 표시되어야하며 스크롤 휠을 사용하여 표시되는 숫자와 위아래 화살표 키를 같은 효과로 조정할 수 있습니다.

수정 자 키를 눌렀을 때마다 다른 증분으로 전환해야합니다. 나중에 사용자가 텍스트 필드 위로 마우스를 드래그 할 때 alt 키를 누른 상태에서 숫자의 어느 자리에서 삽입 캐럿이 배치되었는지를 결정하고 해당 숫자 만 증가 시켜서 사용자는 1, 수십, 수백 등의 부품을 신속하게 업데이트 할 수 있습니다.

수정 자 키와 마우스 끌기 세부 사항은 그저 세부 사항이지만, 제 질문은 바인딩을 비롯한 다른 기능이 계속 작동 할 수 있도록하기 위해 가장 눈에 띄지 않는 방식으로이를 달성하는 기본 사항에 더 관심이 있습니다.

지금까지 NSTextField의 하위 클래스 (IB의 셀에 연결된 숫자 포맷터 포함)와 NSTextView의 하위 클래스가 전화 걸기 텍스트 필드의 필드 편집기로 사용되었습니다. 이것은 keyDown을 재정의 (override) 할 수 있도록하기 위해서입니다 : 화살표 키가 업데이트되도록하십시오.

문제는 창 위임자의 windowWillReturnFieldEditor : toObject :에서 전화 걸기 텍스트 필드에 대해이 필드 편집기를 반환하면 바인딩을 끊는 것처럼 보입니다. 일반적으로이 작업을해서는 안되는 것 같습니다.

내가 잘못 생각하고 있습니까?

PS : 하위 클래스 코드 만 찾을 수 있습니다. http://gist.github.com/361265 여기에 모두 게시해야할지 확실하지 않았습니다.

답변

0

나는 이것을 과거에 사용했다. 먼저 전화와 같은 번호를 포맷 : URL 형식과 같이 : 내가 무슨 짓을했는지 그리고

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

내 구현이 정적 jQuery과 관련 있기 때문에 (나는 사용자가 터치하는 행을 확인하고이했다 :

- (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 메서드를 호출하면 나에게 효과적입니다.