2010-05-15 16 views
0

J'essaie de coller le texte directement dans l'emplacement actuel du curseur. J'ai essayé de faire ce qu'il dit à: - http://dev.ragfield.com/2009/09/insert-text-at-current-cursor-location.htmliphone sdk - Problème de collage dans l'emplacement de texte actuel

L'affaire principale est que je ne peux pas simplement aller textbox1.text (etc) parce que le champ de texte est au milieu d'une cellule personnalisée. Je veux juste ajouter du texte à l'endroit où se trouve le curseur (lorsque j'appuie sur une touche personnalisée d'un clavier).

-Je veux juste coller un nombre décimal dans la zone de texte ...

L'erreur que je reçois est:

2010-05-15 22: 37: 20,797 PageControl [37962: 207] * - [MyDetailController paste:]: sélecteur non reconnu envoyé à l'instance 0x1973d10 2010-05-15 22: 37: 20.797 PageControl [37962: 207] * Fin de l'application en raison d'une exception non interceptée 'NSInvalidArgumentException', raison: '*** - [MyDetailController paste:]: sélecteur non reconnu envoyé à l'instance 0x1973d10 '

Note: J'ai accès à l'étiquette textfield (si cela aide?)

Je suis un peu dépassé le stade débutant en c objectif, mais pas encore grand. Mon code est actuellement ci-dessous, et à https://gist.github.com/d634329e5ddf52945989

Merci à tous.


MyDetailController.h

@interface MyDetailController : UITableViewController <UITextFieldDelegate,UINavigationControllerDelegate> 
{ 

//...(lots in here) 

} 


@end 


@interface UIResponder(UIResponderInsertTextAdditions) 
- (void) insertText: (NSString*) text; 
@end 

MyDetailController.m

@implementation MyDetailController 


//.... (lots in here) 



- (void)addDecimal:(NSNotification *)notification { 
    // Apend the Decimal to the TextField. 
    //savedAmount.text = [savedAmount.text stringByAppendingString:@"."]; 

    NSLog(@"Decimal Pressed"); 
    NSLog(@"tagClicked: %d",tagClicked); 
    switch (tagClicked) { 
     case 7: 

      //savedAmount.text = [savedAmount.text stringByAppendingString:@"."]; 
      break; 
     case 8: 
      //goalAmount.text = [goalAmount.text stringByAppendingString:@"."]; 
      break; 
     case 9: 
      //incrementAmount.text = [incrementAmount.text stringByAppendingString:@"."]; 
      break;  
     case 10: 
      //incrementAmount.text = [incrementAmount.text stringByAppendingString:@"."]; 
     break; 
    } 

    [self insertText:@"."]; 
} 

-(void)textFieldDidBeginEditing:(UITextField *)textfield{ 

    //UITextField *theCell = (UITextField *)sender; 
    tagClicked = textfield.tag; 
    NSLog(@"textfield changed. tagClicked: %d",tagClicked); 



} 

@end 

    @implementation UIResponder(UIResponderInsertTextAdditions) 

    - (void) insertText: (NSString*) text 
    { 
     // Get a refererence to the system pasteboard because that's 
     // the only one @selector(paste:) will use. 
     UIPasteboard* generalPasteboard = [UIPasteboard generalPasteboard]; 

     // Save a copy of the system pasteboard's items 
     // so we can restore them later. 
     NSArray* items = [generalPasteboard.items copy]; 

     // Set the contents of the system pasteboard 
     // to the text we wish to insert. 
     generalPasteboard.string = text; 

     // Tell this responder to paste the contents of the 
     // system pasteboard at the current cursor location. 
     [self paste: self]; 

     // Restore the system pasteboard to its original items. 
     generalPasteboard.items = items; 

     // Free the items array we copied earlier. 
     [items release]; 
    } 

    @end 

Répondre

1

UIViewController est un UIResponder ... mais ce n'est pas l'UIResopnder qui devrait recevoir le message insertText: Vous voulez appeler insertText: sur le UITextField lui-même. Si vous jetez un oeil à UIResponder.h vous verrez le commentaire suivant près de la pâte: Méthode

// ces méthodes ne sont pas mises en œuvre dans NSObject

Ce qui signifie que ce n'est pas nécessairement sûr de les appeler simplement une UIResponder. Ils ne peuvent être appelés en toute sécurité que sur des sous-classes telles que UITextField et UITextView qui les implémentent réellement. Ce fut une décision de conception vraiment étrange sur la partie d'Apple.

+0

J'ai juste essayé d'ajouter une méthode paste: vide, et cela passe l'erreur ci-dessus. Ce qui doit être dans la méthode paste: pour que inserText insère réellement du texte? Salutations – oberbaum

+0

Vous ne voulez pas appeler insertText: ou coller: sur votre objet UIViewController, vous voulez appeler [textField insertText: text] – ragfield

+0

Eh bien, je l'ai résolu maintenant, ce qui précède m'a au moins sur la droite direction. Merci. – oberbaum