2011-07-29 59 views
5

我有一個UITextField的inputAccessoryView設置,它在需要時(與Apple的KeyboardAccessory示例完全相同)從XIB加載。我不能讓我的頭圓 - (void)playInputClick;

我試圖讓按鈕上點擊時使用playInputClick函數按下,但我不能解決如何。 Apple documentation說我需要添加一個委託方法到視圖,但該視圖純粹是在界面生成器中創建的,所以我不明白我能做到這一點。

有誰知道如何使這項工作?似乎沒有在互聯網上任何地方使用這種方法的示例代碼。

+0

您需要將該類更改爲其當前內容的子類並在自定義類中實現協議 – bshirley

回答

-2

您需要實現一個視圖控制器類,並在界面生成器中將文件的所有者分配爲該類。將視圖控制器的視圖連接到您的視圖。

一旦你完成了,你可以在視圖控制器中實現委託。 它非常簡單直接。基本上你的視圖將是一個視圖控制器類的成員。

+0

從apple文檔:'在您的UIView的自定義子類中實現此協議'。所以這是錯誤的,它實際上是要在UIViewController子類中實現呢? –

+0

您也可以創建一個從uview派生的自定義類。基本上它是一樣的。 –

+1

好的,我試過了。我創建了一個實現協議和委託方法的CustomKeyboardController類,將inputAccessoryView設置爲customKeyboardController.view。當按下按鈕時,仍然沒有聲音。我知道[[UIDevice currentDevice] playInputClick]方法正在運行,因爲我在它旁邊有一個NSLog語句,我看到它的調試輸出。只是沒有聲音。 –

4

我一直有同樣的問題,最後想通了。

如果您在UIViewController中實現協議,則不起作用。它需要在UIView子類中實現。

所以爲了讓它工作,我在界面生成器中用視圖控制器創建了一個視圖。然後我添加了另一個類,它是UIView的子類。這個類實現了UIInputViewAudioFeedback協議。然後在界面生成器中,我去了我的視圖的身份檢查器,並將類更改爲實現UIInputViewAudioFeedback協議的UIView子類。鍵盤咔嗒聲現在正在工作。

我的視圖控制器仍在調用[[UIDevice currentDevice] playInputClick],我所做的只是將UIInputViewAudioFeedback協議的代碼移動到UIView子類中,並將我的視圖類設置爲我的UIView子類。

+0

謝謝你提供最有用的答案。所以基本上這個方法對於在標準視圖上添加點擊按鈕是沒有用的。這一切都必須分類。 –

+0

@YiminRong似乎改變了視圖控制器的視圖,使其擁有子類別。 – dimpiax

+0

提供我製作「Select collectionViewCell playInputClick」的經驗:在UICollectionViewCell子類中實現UIInputViewAudioFeedback協議將不起作用。它必須在UICollectionView子類中實現。 – denkeni

4

假設你正在嘗試做這在inputAccessoryView:

.h文件,表明你實現UIInputViewAudioFeedback

@interface YourAcessoryView : UIView <UIInputViewAudioFeedback> 

.m文件,添加這個方法來滿足本協議

- (BOOL)enableInputClicksWhenVisible { 
    return YES; 
} 

當按下按鈕時,請按如下操作:

- (void)buttonPressed:(UIButton*)sender 
{ 
    [[UIDevice currentDevice] playInputClick]; 
    // do more stuff 
}