之前我看到的視圖控制器的代碼實現了以下是否視圖 - 控制必須聲明<UIAlertViewDelegate>來響應alertview
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
}
但我認爲這需要聲明使用<UIAlertViewDelegate>
。
但是,我無法在視圖控制器的頭文件中找到此聲明。
我想知道爲什麼代碼可以響應該事件?
之前我看到的視圖控制器的代碼實現了以下是否視圖 - 控制必須聲明<UIAlertViewDelegate>來響應alertview
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
}
但我認爲這需要聲明使用<UIAlertViewDelegate>
。
但是,我無法在視圖控制器的頭文件中找到此聲明。
我想知道爲什麼代碼可以響應該事件?
可可常常會動態檢測實施的委託方法的存在與否,而不是依賴於靜態類型。因此,沒有必要正式聲明您的視圖控制器符合協議UIAlertViewDelegate
,除非您希望編譯器警告您未實現協議所需的方法。
在內部,UIAlertView
會檢查UIAlertViewDelegate
是否響應在嘗試調用它之前要調用的選擇器,從而不需要聲明協議實現。對於來自靜態類型語言的開發人員來說,這看起來很不尋常,但在Objective C中這是司空見慣的。
您至少需要設置UIAlertView
的delegate
屬性。建議讓班級宣佈它正在實施UIAlertViewDelegate
,但不是強制性的。原因在於,ObjectiveC是動態語言,即使該類未標記協議,運行時也會找到方法實現。
希望有幫助!
不,你不需要實現UIAlertViewDelegate,因爲它確認NSObject。
你使用UIAlertView?您是否需要根據觸摸哪個按鈕來執行操作(即,除了具有「確定」按鈕的簡單信息以外)? – Larme