2013-08-22 42 views
1

之前我看到的視圖控制器的代碼實現了以下是否視圖 - 控制必須聲明<UIAlertViewDelegate>來響應alertview

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
} 

但我認爲這需要聲明使用<UIAlertViewDelegate>

但是,我無法在視圖控制器的頭文件中找到此聲明。

我想知道爲什麼代碼可以響應該事件?

+0

你使用UIAlertView?您是否需要根據觸摸哪個按鈕來執行操作(即,除了具有「確定」按鈕的簡單信息以外)? – Larme

回答

2

可可常常會動態檢測實施的委託方法的存在與否,而不是依賴於靜態類型。因此,沒有必要正式聲明您的視圖控制器符合協議UIAlertViewDelegate,除非您希望編譯器警告您未實現協議所需的方法。

在內部,UIAlertView會檢查UIAlertViewDelegate是否響應在嘗試調用它之前要調用的選擇器,從而不需要聲明協議實現。對於來自靜態類型語言的開發人員來說,這看起來很不尋常,但在Objective C中這是司空見慣的。

0

您至少需要設置UIAlertViewdelegate屬性。建議讓班級宣佈它正在實施UIAlertViewDelegate,但不是強制性的。原因在於,ObjectiveC是動態語言,即使該類未標記協議,運行時也會找到方法實現。

希望有幫助!

-1

不,你不需要實現UIAlertViewDelegate,因爲它確認NSObject。