2012-01-05 37 views
13

我有內置的UIWebView的複製和定義選項。它在iPad上工作得很好,但在iPhone上,它只在我突出顯示文本並使用字典時才起作用,第二次嘗試時,它不會顯示彈出窗口。任何想法?UIWebView和定義字典

UPDATE: 我收到以下錯誤並駁回iPhone上的字典時:爲UIFallbackPresentationViewController

不平衡通話開始/結束的外觀過渡

UPDATE: 當我提出一個UIAlertView中並取消它的字典再次工作。想知道爲什麼?

+0

我認爲這個警告消息表明UIFallbackPresentationViewController沒有得到完全實例化之前被解僱的其他視圖控制器。 – 2012-01-06 02:55:03

+0

問題是我的代碼中甚至沒有UIFallbackPresentationViewController,我認爲這是蘋果的 – adit 2012-01-06 03:09:48

+0

您是否曾經找出導致此問題的原因和/或解決方案? – 2012-09-14 17:17:38

回答

2

沒有看到你的代碼,這將是很難給出這個問題的答案。如果你能顯示你的邏輯,那將會容易得多。

話雖這麼說,這裏有幾個技巧,可以幫助:

  1. 請確保您調用您的類中的所有適當的超級方法。例如,如果您覆蓋viewDidAppear:animatedviewDidLoad,請確保您調用超級方法。
  2. 結帳this thread ...也許你在一個不適當的地方做某種動畫?
+1

創建「單一視圖應用程序」,添加「UITextView」,運行它,在文本視圖中選擇一個單詞,選擇定義並檢查調試控制檯 – 2012-10-22 14:42:19

+0

我看到消息,但每次顯示彈出窗口。應用程序? – 2012-10-22 14:47:30

+0

這是非常隨機的,例如,我的「UIImageView」手勢識別器不起作用,我想找出根本原因,因爲我發現使用這種「俄羅斯輪盤賭」 「issue。:) – 2012-10-22 15:09:55

11

目前有52 other questions計算器上提到這個錯誤..

從閱讀一些我認爲蘋果的代碼使用呼籲presentModalViewController:前的實際字典視圖是滿載。

我認爲這僅僅是蘋果公司已解決,Rudolf Adamkovic's sample做了一個錯誤明確:

  • 創建「單一視圖應用」
  • 添加UITextView的
  • 運行它
  • 選擇一個單詞在文本視圖
  • 選擇定義

  • 調試控制檯告訴的你是這樣的:

    Unbalanced calls to begin/end appearance transitions for 
    <_UIFallbackPresentationViewController: 0x74c1660> 
    

我提交的bug在:https://bugreport.apple.com

示例代碼:https://github.com/tiemevanveen/DefineBugDemoProject

+2

感謝bug報告。 :-)稍微修改:在stackoverflow上還有52個其他問題討論了不平衡調用問題,其中大部分問題通過更正代碼來修復等等。但是,只有兩個問題(根據我的搜索)與神祕的_UIFallbackPresentationViewController消息討論這個特定的問題。這兩個問題都沒有解決方案。 – 2012-10-25 17:38:17

+0

這就是爲什麼我報告了錯誤。我會期待蘋果的反應。 – Tieme 2012-10-25 18:06:12

+0

Apple:「爲了進一步調查此問題,工程部門要求提供以下信息:請附上一個示例項目,以說明您正在報告的問題。」 - 我這樣做了:) – Tieme 2012-12-04 23:33:29

0

我能夠重現錯誤(顯示了在控制檯),但對我來說,每次都會有popover。所以我不會擔心,因爲它似乎沒有造成任何崩潰。

唯一的「解決方法」是禁用/替換「定義」菜單項。但要做到這一點的唯一方法是通過編寫一個私有類的類別(這是禁止的):

@interface UIWebBrowserView : UIView 

@end 

@interface UIWebBrowserView (Add) 


@end 

@implementation UIWebBrowserView (Add) 
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender 
{ 
    if(action == @selector(_define:)) 
     return NO; 
    return [super canPerformAction:action withSender:sender]; 
} 
@end 

這樣做有沒有寫一個類(法混寫)的更「聰明」的方式,但他們更危險。

如果它的工作,我會讓它獨自一人。我啓用了ARC,所以我不確定這是否有所作爲。

+0

我正在建立一個閱讀應用程序,定義是必須的(尤其是對於外國讀者)。 – 2012-11-23 15:18:02

0

該解決方案的所有功勞均爲@acue。請參閱here

現在,這是我如何解決它。 在字典出現後,打印出[UIApplication sharedApplication] .keyWindow,以找出哪個子視圖被賦予焦點。

在該子視圖,用於UIWindowDidBecomeKeyNotification

並註冊。當得到通知貼出,叫下面的方法: -

- (void) makeKeyWindow { 
    AppDelegate * appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [appDelegate.window makeKeyAndVisible]; 
} 

即使這樣,我仍然看到錯誤,UIMenu &字典都繼續按預期工作。