2011-06-20 73 views
6

我遇到問題,找不到解決方法。缺少UITextField中的複製/粘貼菜單/ UIWebView

我有一個UIWebView實現和UITextField的視圖。 在這兩種情況下,當我點擊時,我都沒有複製/粘貼菜單出現。

UIWebView在其中有文本(僅文本),我可以選擇單詞或段落或使放大鏡出現並手動選擇我想要的文本。

另一方面,除了複製/粘貼功能,UITextField可以輸入和按預期工作。

沒有分類。我只需要默認的iOS複製/粘貼功能。

此問題不在單一視圖中。我有另一個UIWebView在別處有同樣的問題,所以我認爲這是一個全球性問題。

我已經做了所有顯而易見的(導入UIKit和基礎框架,分配屬性,釋放等),但我仍然堅持這一點。

什麼可能相互作用/干擾這樣一個簡單的功能,禁用它?此外,總是在最簡單的實施下,這還需要什麼工作? (我失蹤的任何框架,任何財產等)。

這麼簡單的事情,我堅持下去。 如果有人有任何想法,非常感謝。

==== ====編輯

的問題不是由我或者在任何視圖類代碼造成的。

我已經添加了一個新的視圖(應用程序是基於tabbar的)只有一個UITextField和一個UITextView與默認的「Lorem Ipsum」文本。 在textView上,我也可以選擇文本,但沒有菜單複製/粘貼/選擇/選擇全部。 這也發生在textField(空)沒有粘貼菜單出現(我從另一個應用程序,例如從Safari或Notes複製一些文本)。

看來這個問題在其他地方影響普遍的應用程序,在所有意見。

我已經刪除了框架引用並將它們放回,但沒有發生任何事情。 我仍然試圖從這裏來。

回答

7

我遇到了同樣的問題 - 其他所有工作都正常,但全部UITextView都缺少全局應用程序中的「複製/粘貼/選擇」菜單。

一些試驗後,我發現,原因是無論是:在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

僅用於完成目的,此代碼應該寫入您試圖顯示菜單的視圖中。不是int UIViewController。 (因爲你沒有繼承任何東西,所以你不需要這個,對不起,我錯過了一些東西) – nacho4d

0

OK,我找到了解決辦法。 這與代碼或對象的屬性無關。它或多或少是XCode4的「實現」。

當創建一個新的通用項目時,xcode將AppDelegate放在項目的根目錄下,並在每個文件夾中放置另外兩個AppDelegates,一個用於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有類似的實現(但我認爲不)。

+0

你有沒有找到一個解決方案,而不刪除根代表。我已經將我的窗戶移動到iphone/ipad代表,但仍然沒有看到複製和粘貼 – zambono

+0

沒有嘗試任何比這更進一步。通過這樣做,我還修復了其他問題(例如iPad鍵盤右下角的「鍵盤隱藏」按鈕開始工作)。我認爲它是因爲該項目最初是在xcode3上創建的,在傳遞Xcode4後,一些剩菜可能會完成這項工作。我假設在xcode4上創建的新項目不會有問題。這是一個非常奇怪的案例,這個解決方案或多或少是一種解決方法。 – Pericles