2010-10-28 51 views
1

我正在使用Monotouch爲iPhone開發應用程序。iPhone應用程序InputAccessoryView未出現在iPad上

在我的僅iPhone應用程序中,只要用戶選擇文本字段,就會出現InputAccessoryView。附件視圖提供了幫助用戶的按鈕(撤消/重做等)。

它在仿真器和iPhone設備上非常有效。

然而,出乎意料的是,輸入配件視圖並未出現在iPad上。關於意見,我沒有修改代碼。我甚至回到了一個版本,我知道正確顯示配件視圖。

我想知道是否有其他人遇到過這種行爲之前/會知道爲什麼會發生這種情況?

編輯

我已經看到了這個進行的跨在iPad上運行我的iPhone項目的所有。我做了一個新的項目,其中只包含1個視圖,UITextField並覆蓋輸入配件視圖,但我仍然沒有看到任何東西。我使用的測試輸入視圖的覆蓋

代碼是:

public override UIView InputAccessoryView 
{ 
    get 
    { 
     UIView view = new UIView(new RectangleF(0,0,320,30)); 
     view.BackgroundColor = UIColor.Blue; 
     return view; 
    } 
} 

沒有什麼太複雜,在iPhone剛剛返回鍵盤上方的藍色條欄。

我重新安裝了Mono,MonoDevelop,Monotouch和iOS SDK多次無濟於事。我從商店下載的應用程序仍顯示輸入附件視圖,所以我開始懷疑這是否與我的Monotouch/iOS SDK組合有關?我正在使用MonoTouch 3.1.3 Personal和4.1 iOS SDK - Mono的2.6版本。我將嘗試更新到單聲道版本2.8。

我不明白的事情是爲什麼它以前會工作然後突然就停止工作?

當我在iPad上部署代碼時,我選擇「重建所有」,然後上傳到設備。如果我選擇發佈/調試作爲構建,則無關緊要,都會產生相同的結果。

編輯2

如果我子類UITextField並覆蓋該子類中的InputAccessoryView,則視圖顯示在iPad。這意味着在View類中被重寫的InputAccessoryView未被分配給ipad上的Textfield。

編輯3 它會出現這是固定在iOS 4.2與Monotouch 3.2!

+0

能不能介紹一下,當你部署在iPad上的代碼,你做什麼詳細點嗎?您是否嘗試在iPad上運行iPhone應用程序(未修改)?還是你建立了一個新的iPad項目,複製了代碼,然後觀察其行爲是不同的?你能發佈一個最小的代碼/設置,重現行爲? – user8472 2010-11-02 11:58:39

+0

查看更新後的問題 – Luke 2010-11-04 09:39:09

回答

2

我的第一個建議是在iTunes中重置設備。您可能已經這樣做了,但如果您沒有這樣做,請先做(因爲它快速且容易)。

如果沒有幫助:要確定Monotouch和/或iOS SDK是否存在問題,您是否可以僅使用Cocoa Touch重複上述操作?

I.e.,在XCode中啓動一個基於視圖的應用程序,在Interface Builder中添加一個UITextField並將其連接到控制器。這裏有一個相應的Objective-C代碼做到這一點:

實例變量在你的控制器(添加到@interface節中的<controllername>.h文件):

IBOutlet UITextField *text; 
UIView *accessory; 

胡克在Interface Builder中UITextFieldtext出口和然後添加以下實施viewDidLoad到控制器(在<controllername>.m文件@implementation部分):

- (void)viewDidLoad { 
    accessory = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 30)]; 
    [accessory setBackgroundColor:[UIColor blueColor]]; 
    [text setInputAccessoryView:accessory]; 
    [super viewDidLoad]; 
} 

如果這顯示藍條正確,問題與Monotouch的設置。如果沒有,這是您的設備的問題。

+0

這真棒 - 謝謝!我已經做到了,我得到了ipad的配件視圖,這導致我相信這是一個Monotouch相關問題。 – Luke 2010-11-04 14:35:29

+0

@Luke:是的,因爲你說使用之前我懷疑的更新,MonoTouch的(和/或到iOS和/或SDK)已經推出您所看到的錯誤工作。我想最好的解決方案是使用Novell提交錯誤報告,並使用臨時解決方法來使用「空」子類(如上所述)。 'UIViewController'有兩個'UITextFields'通過IB掛鉤到它: – user8472 2010-11-04 15:23:46

1

你如何展示你的配件看法?

你可以嘗試保持一個參考的看法?

試試這個,讓我知道如果失敗:

公共類Foo { 靜態UIView的軌道; }

然後當你創建你的觀點,堅持在全球:

Foo.track =新MyAccessoryView()

+0

我如下顯示它。在UIViewController類中,我重寫'UIView InputAccessoryView'(我在覆蓋內創建視圖,如我的問題所示)。我發現這顯示了意見。我試着保留一個參考,在iPhone上成功,但在ipad上'Foo.track'爲空。所以重寫不在iPad上被調用,而是在iPhone上? - 忘了說,謝謝你的幫助,非常感謝:) – Luke 2010-11-04 14:56:40

+0

聽起來像你找到了問題的根源,你的覆蓋沒有被調用。爲什麼會發生這樣的謎團,只有當你有源時才能放鬆身心;-) – 2010-11-04 15:31:00

2

我這裏包含一個UIView內一個UITextView將表現出同樣的問題模擬器上的附件欄,但不在iPhone或iPad上。

我在做一些與BeginFirstResponder奇怪的事,允許在更大的父區域的任何地方攻(含標籤和文本字段)並激活所包含的領域和懷疑這個參與。我在父級UIView中添加了代碼來覆蓋InputAccessoryView,並讓它從子UITextView中返回值,並且這個已修復。

我懷疑MonoTouch的具有路由事件錯對象了一個問題,我的修補程序解決它。

僞代碼:

public class ParentView : UIView 
{ 
    UILabel Label; 
    MyTextView Text; 

/*Magic line here that fixed the problem */ 
public override UIView InputAccessoryView {get{return Text.InputAccessoryView;}} 
} 

public class MyTextView : UITextView 
{ 
    UIView Accessory; 

    public override UIView InputAccessoryView {get{return Accessory;}} 
} 
相關問題