根據iPhone應用程序編程指南(事件處理章節),如果使用UIView或UIViewController,我應該實現所有事件處理方法(即使它是空實現)。我不應該調用這些方法的超類實現。爲什麼要在處理UIView子類中的事件時實現所有事件處理方法?
爲什麼? (我在指南和谷歌搜索,但無法找到答案...或只是不能做一個好的搜索)
根據iPhone應用程序編程指南(事件處理章節),如果使用UIView或UIViewController,我應該實現所有事件處理方法(即使它是空實現)。我不應該調用這些方法的超類實現。爲什麼要在處理UIView子類中的事件時實現所有事件處理方法?
爲什麼? (我在指南和谷歌搜索,但無法找到答案...或只是不能做一個好的搜索)
來自guide:
這樣做的原因方針是 簡單:所有這些處理 觸摸,包括你自己,希望 (或應該會),以獲得全額 觸摸事件流的看法。如果您阻止接收 事件的某個階段的UIKit響應器對象接觸 事件,則最終的行爲可能是 未定義,並且可能不合需要。
有很多東西在視圖中決定運行時間由用戶...通過它的代表方法...如果它沒有被定義有機會,你的應用程序會崩潰...
例如,如果你有一個應用程序,並且你正在使用UITableView,如果你不實施
tableView:cellForRowAtIndexPath:
它不會給你任何錯誤......但是當你運行應用程序,當含有泰伯維負載應用視圖會崩潰 ,你會得到
*終止應用程序由於未捕獲的異常「NSInternalInconsistencyException」,理由是:「UITableView的數據源必須的tableView返回細胞:的cellForRowAtIndexPath:」
因爲應用程序不知道如何表達細胞表...
因此,這將是相同的情況下用的UIView和UIViewController的...如果沒有實現你的應用程序特定的委託方法可能是對某些事件的崩潰(可能是不...)
但爲什麼不可能使這些觸摸的默認(空)實現(只允許在假定的子類中的必要實現)? – kpower 2010-04-13 07:24:23
我不相信這是不可能的,但設計師可能決定他們不會實現null方法......或者添加觸摸處理的團隊無法訪問原始UIView代碼(或者不允許修改它)。 – jessecurry 2010-04-13 13:41:02
也許...非常感謝您的回答和評論。 – kpower 2010-04-15 04:19:10