2011-06-20 5 views
6

問題が発生しましたが、回避策が見つかりません。UITextField/UIWebViewのコピー/ペーストメニューがありません

UIWebViewの実装とUITextFieldのビューがあります。 両方をタップすると、コピー/ペーストメニューが表示されません。

UIWebViewにはテキストが含まれており(テキストのみ)、単語または段落のいずれかを選択するか、または拡大鏡を表示して手動で希望のテキストを選択できます。

一方、UITextFieldはコピー&ペースト機能を除き、意図したとおりに入力して動作します。

サブクラス化されているものはありません。私はコピー/貼り付け機能のためのiOSのデフォルトの実装だけが必要です。

この問題は単一のビューではありません。他の場所で同じ問題が発生している別のUIWebViewがあるので、これはグローバルな問題だと思います。

私はすべての明白な(UIKitとFoundationフレームワークのインポート、プロパティの割り当て、リリースなど)を行っていますが、やはり私はこれに固執しています。

このような単純な機能と相互作用/干渉し、無効にするものは何ですか? さらに、最も簡単な実装では、これが機能するために何が必要ですか? (私が不足しているフレームワーク、任意のプロパティなど)。

このような簡単なことと私はそれに固執しています。 誰かがそれほど感謝したことがあれば。

====編集====

問題が任意のビューまたはクラスに私のコードが原因ではありません。

デフォルトの "Lorem Ipsum"テキストを持つUITextFieldとUITextViewだけを持つ新しいビュー(アプリケーションはタブバーベース)を追加しました。 テキストビューでは、テキストを選択できますが、コピー/貼り付け/選択/すべてを選択するメニューはありません。 これは、貼り付けメニューが表示されないtextField(空白)でも発生します(別のアプリのテキスト(例:SafariまたはNotes)をコピーします)。

すべてのビューで、普遍的なアプリケーションに影響を与える問題があるようです。

フレームワークの参照を削除して戻しましたが、何も起こりませんでした。 私はまだこれがどこから来るのか把握しようとしています。

答えて

7

私は同じ問題を抱えていました。それ以外はすべて正常に動作しましたが、すべてのアプリケーションでグローバルに「コピー/ペースト/選択」メニューが表示されませんでした。いくつかの実験の後、私は原因はどちらかであることがわかってきました

:MainWindow.xib

OR

[self.window makeKeyAndVisible]に不足しているの呼び出しでウィンドウに設定されていない

「打ち上げで可視」プロパティ内部application:didFinishLaunchingWithOptions: AppDelegateのメソッド。

のいずれかを修理しても問題ありません。です。それを試してみてください。

+0

それは、xcode 3でプロジェクトを作成した場合、makeKeyandVisibleも必要です。ありがとうございます。 – zambono

+0

それは私のために働いた。 – George

+0

ちょうどこの正確な問題がありました。 [window makeKeyAndVisible]はそれを解決しました。素晴らしい探偵作品! – jsd

1

あなたが実装していることを確認してください:

//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

私はcanPerformAction:(単独)を試みましたが、結果はありません。 initWithFrameで、self = [super initWithFrame:frame]はUIViewControllerが応答しないことを警告します。 – Pericles

+0

このコードは、メニューを表示しようとしているビューに書き込まれるはずです。 UIViewControllerではありません。 (何かをサブクラス化していないので、これは必要ありません。何かお見逃し申し訳ありません) – nacho4d

0

OK、私は解決策を見つけました。 これは、オブジェクトのコードまたはプロパティとは関係ありません。 XCode4の多かれ少なかれ「実装」。

新しい普遍的なプロジェクトが作成されると、xcodeはAppDelegateをプロジェクトのルートに配置し、さらに2つのAppDelegatesを各フォルダに配置します.1つはiPad用、もう1つはiPhone用です。

ルートアプリデリゲートは、iPhoneとiPadアプリの代表がNO 'ウィンドウの参照を持っていない

#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 

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

のように見えます。

ルートのAppDelegateが削除され、各デバイス固有のAppDelegateで 'ウィンドウ'コードが移動された場合、選択/すべて選択/コピー/貼り付け(または他のオプション)メニューが再度表示されます。

これは私が作成した最初の新しいxcode4で私に起こりました。私はxcode3が似たような実装をしていれば覚えていません。

+0

ルートデリゲートを削除せずに解決策を見つけましたか?私はiPhone/ipadの代理人に私のウィンドウを移動したが、コピーと貼り付けはまだ表示されません – zambono

+0

これ以上は試していません。そうすることで、私は他の問題も解決しました(例えば、iPadキーボードの右下の "キーボード隠し"ボタンが機能し始めました)。私はそのプロジェクトが最初にxcode3上に作成されていて、Xcode4を渡した後に残りの仕事の一部が(おそらく)仕事をしたと思います。私はxcode4で作成された新しいプロジェクトには問題がないと考えています。非常に奇妙なケースで、この解決策は多かれ少なかれ回避策です。 – Pericles

関連する問題