8
votes

Menu de copie / pâte manquante dans UITEXTFIELD / UIWebView

J'ai un problème et je ne trouve pas de solution de contournement pour cela.

J'ai une vue avec un uiwebview implémentation et un uitextfield . Sur les deux, lorsque je tape, je ne reçois pas le menu de copie / colle pour apparaître.

Le uiwebView a un texte de texte (texte uniquement) et je peux sélectionner un mot ou un paragraphe ou faire apparaître le verre de grossissement et sélectionner manuellement le texte que je veux.

d'autre part, uitextfield peut prendre des entrées et fonctionne comme prévu, à l'exception des fonctions de copie / pâte.

Rien n'est sous-classé. Je n'ai besoin que de la mise en œuvre par défaut de iOS pour les fonctions de copie / pâte.

Ce problème n'est pas dans une seule vue. J'ai un autre uiwebview avec le même problème ailleurs, donc je pense que c'est un problème global.

J'ai fait tout ce qui est évident (importer des cadres d'assurance-emploi et de fondation, attribuer des propriétés, libérant, etc.), mais je suis encore coincé sur ceci.

Qu'est-ce qui pourrait interagir / interférer avec une telle fonctionnalité simple, le désactivant? De plus, toujours sous la mise en œuvre la plus simple, quoi d'autre est nécessaire pour que cela fonctionne? (Tout cadre qui me manque, tout bien, etc.).

Une telle chose simple et je suis coincé avec ça. Si quelqu'un a une idée, c'est très apprécié.

==== EDIT ====

Le problème n'est pas causé par mon code dans une vue ou une classe.

J'ai ajouté une nouvelle vue (l'application est basée sur l'onglet) avec seulement un UITEXTFIELD et un UITEXTVIEW avec le texte par défaut "lorem ipsum". Sur TextView, je peux également sélectionner du texte mais pas de menu pour copier / coller / sélectionner / sélectionner tout. Cela se produit également dans le champ de texte (vide) où aucun menu de pâte n'apparaît (je copie du texte d'une autre application, ex. Safari ou Notes).

Il semble que le problème soit quelque part ailleurs affectant universellement l'application, sous toutes les vues.

J'ai supprimé les références de cadres et les remettez-les, mais rien ne s'est passé. J'essaie toujours de comprendre où cela vient.


0 commentaires

5 Réponses :


1
votes

Assurez-vous de mettre en œuvre:

//init your menu somewhere, appropiately

- (id) initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    if (self) {

        NSMutableArray *items = [[[UIMenuController sharedMenuController] menuItems] mutableCopy];
        if (!items) items = [[NSMutableArray alloc] init];

        UIMenuItem *menuItem;
        menuItem = [[UIMenuItem alloc] initWithTitle:@"Undo" action:@selector(undo:)];
        [items addObject:menuItem];
        [menuItem release];
        menuItem = [[UIMenuItem alloc] initWithTitle:@"Redo" action:@selector(redo:)];
        [items addObject:menuItem];
        [menuItem release];

        [[UIMenuController sharedMenuController] setMenuItems:items];
            [items release];

    }
    return self;
}

//allow other items to appear and yours too :) Perhaps you are missing this?
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    if ([super canPerformAction:action withSender:sender]) {
        return YES;
    }
    else {
        //write your code here
        if (action == @selector(undo:) && [self.undoManager canUndo]) return YES;
        if (action == @selector(redo:) && [self.undoManager canRedo]) return YES;
    }
    return NO;
}

//Do your actions 
- (void)undo:(id)sender{
//do your stuff here
}
- (void)redo:(id)sender{
//do your stuff here
}


2 commentaires

J'ai essayé CanperFormaction: (seul) mais sans résultat. Sur l'initwithframe, le Self = [Super Initwithframe: cadre] produit un avertissement UIViewController peut ne pas répondre.


Juste à des fins d'achèvement, ce code est censé être écrit dans la vue que vous essayez d'afficher le menu sur. Pas int l'UIViewController. (Depuis que vous ne sous-classant rien, vous n'avez pas besoin de cela, désolé je manque quelque chose)



0
votes

OK, j'ai trouvé la solution. Cela n'a rien à voir avec le code ou les propriétés des objets. C'est plus ou moins une "mise en œuvre" du xcode4.

Lorsqu'un nouveau projet universel est créé, Xcode met un appdelegate à la racine du projet et 2 autres appdelegates dans chaque dossier, un pour l'iPad et un autre pour l'iPhone .

Le délégué de l'application racine ressemble à xxx

avec xxx

L'application iPhone et iPad Les délégués n'ont pas de "fenêtre" référence.

Si l'appdelegate root est supprimé et que le code "Fenêtre" est déplacé dans l'appdelegate spécifique à chaque périphérique, le SELECT / SELECT TOUT / COPY / COLLETE (ou une autre option ) Le menu apparaît à nouveau.

Ceci est arrivé à moi sur le premier nouveau Xcode4 que j'ai créé. Je ne me souviens pas bien si Xcode3 avait une implémentation similaire (mais je pense non plus).


2 commentaires

Avez-vous trouvé une solution sans supprimer le délégué racinaire. J'ai déplacé mes fenêtres sur les délégués iPhone / iPad mais je ne vois toujours pas la copie et coller


n'a pas essayé de plus loin que cela. Ce faisant, j'ai eu d'autres problèmes résolus aussi (ex. Le bouton de masquage du clavier inférieur droit sur le clavier iPad a commencé à travailler). Je pense que c'est parce que le projet a été initialement créé sur XCode3 et après avoir transmis Xcode4, certains restes ont fait le travail (éventuellement). Je suppose qu'un nouveau projet créé sur XCode4 n'aura pas de problèmes. C'est un cas très étrange et cette solution est plus ou moins une solution de contournement.



10
votes

J'ai eu le même problème - tout le reste fonctionnait correctement, mais tout uitextview s manquait "copier / coller / sélectionner" menu, globalement, via toutes les applications.

Après quelques expériences, j'ai constaté que la cause était soit:

Propriété "visible au lancement" non définie sur une fenêtre de MainWindow.xib

ou

Appel manquant à [Self.Window MakeKeyAnandVisible] Intérieur Application: DidfinishlaunchingwithOptions: Méthode d'Appdelegate.

Cela fonctionne bien après la fixation tout de ceux-ci. Essayez-le.


3 commentaires

C'est tout, si vous avez créé le projet en Xcode 3, il a également besoin du makekeyandVisible, merci beaucoup.


Il suffit d'avoir ce problème exact. [Fenêtre MakekeyandVisibleVisible] Résolu. Grand travail de détective!


Cela n'aide pas dans mon cas



0
votes

ressemble à, maintenant (2020) il y a un bogue dans iOS. Lorsque vous modifiez l'alignement de l'UITEXTFIELD au centre (NstexttalignmentCenter), vous ne pouvez pas déclencher des actions telles que Coller pour le champ vide.

Peut-être que c'était aussi votre problème.


0 commentaires

6
votes

Si vous travaillez avec Xcode 11+ et iOS 13+ Projets (et Scedelegate Code>),

Assurez-vous d'appliquer des modifications dans cet ordre exact: P>

    window!.makeKeyAndVisible()
    window!.windowScene = windowScene


2 commentaires

Merci. Cela corrige le problème. Vous êtes incroyable!


C'est la bonne réponse. Est-ce que quelqu'un sait pourquoi cela corrige le problème?