отсутствует меню копирования / вставки в UITextField / UIWebView - PullRequest
6 голосов
/ 20 июня 2011

У меня проблема, и я не могу найти обходной путь для нее.

У меня есть представление с реализацией UIWebView и UITextField. На обоих при нажатии не появляется меню копирования / вставки.

Текст UIWebView содержит текст (только текст), и я могу выбрать либо слово, либо абзац, либо отобразить увеличительное стекло и вручную выбрать нужный текст.

С другой стороны, UITextField может принимать ввод и работать как задумано, за исключением функций копирования / вставки.

Ничего не подклассифицировано. Мне нужна только реализация iOS по умолчанию для функций копирования / вставки.

Эта проблема не в едином представлении. У меня есть другой UIWebView с той же проблемой в другом месте, поэтому я думаю, что это глобальная проблема.

Я сделал все очевидное (импортировал фреймворки UIKit и Foundation, назначил свойства, выпустил и т. Д.), Но снова я застрял на этом.

Что может взаимодействовать / мешать такому простому функционалу, отключая его? Более того, всегда при самой простой реализации, что еще нужно, чтобы это работало? (любые рамки, которые мне не хватает, любое свойство и т. д.).

Такая простая вещь, и я застрял с ней. Если у кого-то есть идея, она очень ценится.

==== Редактировать ====

Проблема не вызвана моим кодом в любом представлении или классе.

Я добавил новое представление (приложение основано на панели вкладок) только с UITextField и UITextView с текстом по умолчанию «Lorem Ipsum». В textView я также могу выбрать текст, но нет меню для копирования / вставки / выбора / выбора All. Это также происходит в textField (пусто), где не появляется меню вставки (я копирую некоторый текст из другого приложения, например Safari или Notes).

Кажется, проблема в том, что где-то еще универсально влияет на приложение, во всех представлениях.

Я удалил ссылки Frameworks и вернул их обратно, но ничего не произошло. Я все еще пытаюсь понять, откуда это происходит.

Ответы [ 3 ]

7 голосов
/ 28 сентября 2011

У меня была такая же проблема - все остальное работало правильно, но на всех UITextView s отсутствовало глобальное меню «копировать / вставить / выбрать» через все приложение.

После некоторых экспериментов я обнаружил, что причина была либо:

Свойство «Видимый при запуске» не установлено для окна в MainWindow.xib

OR

Отсутствует вызов [self.window makeKeyAndVisible] внутри application:didFinishLaunchingWithOptions: метода AppDelegate.

Работает нормально после исправления любых из них. Попробуй.

1 голос
/ 21 июня 2011

Убедитесь, что вы внедрили:

//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
}
0 голосов
/ 21 июня 2011

ОК, я нашел решение.Это не имеет ничего общего с кодом или свойствами объектов.Это более или менее «реализация» XCode4.

Когда создается новый универсальный проект, xcode помещает AppDelegate в корень проекта и еще 2 AppDelegate в каждой папке, один для iPad, а другойдля iPhone.

Делегат корневого приложения выглядит как

#import <UIKit/UIKit.h> 
@interface SampleAppDelegate : NSObject <UIApplicationDelegate> { }
@property (nonatomic, retain) IBOutlet UIWindow *window;

с

#import "SampleAppDelegate.h"
@implementation SampleAppDelegate
@synthesize window=_window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [self.window makeKeyAndVisible];
    return YES;
}
- (void)dealloc
{
    [_window release];
    [super dealloc];
}
@end

Делегаты приложения iPhone и iPad не имеют ссылки «окно».

Если корневой AppDelegate удален и код «окна» перемещен в каждом AppDelegate для конкретного устройства, снова появится меню «Выбрать / Выбрать все / Копировать / Вставить (или любой другой параметр)».

Это случилось со мной на первом новом xcode4, который я создал.Я плохо помню, была ли у xcode3 похожая реализация (но я думаю, что нет).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...