簡(jiǎn)述
本文將講述在iOS開發(fā)中如何根據(jù)某個(gè)UIView來獲取所屬的UIViewController
UIResponder
在iOS中UIResponder類是專門用來響應(yīng)用戶的操作處理各種事件的孝冒,包括觸摸事件(Touch Events)、運(yùn)動(dòng)事件(Motion Events)睡扬、遠(yuǎn)程控制事件(Remote Control Events)够话。我們知道UIApplication瓢阴、UIView、UIViewController這幾個(gè)類是直接繼承自UIResponder,所以這些類都可以響應(yīng)事件。當(dāng)然我們自定義的繼承自UIView的View以及自定義的繼承自UIViewController的控制器都可以響應(yīng)事件矢劲。
通過響應(yīng)鏈查找視圖控制器啊胶,nextResponder獲取下一個(gè)響應(yīng)者甸各,響應(yīng)者順序?yàn)椋?/p>
20170512174229676.png
代碼
- (UIViewController *)getControllerFromView:(UIView *)view {
// 遍歷響應(yīng)者鏈。返回第一個(gè)找到視圖控制器
UIResponder *responder = view;
while ((responder = [responder nextResponder])){
if ([responder isKindOfClass: [UIViewController class]]){
return (UIViewController *)responder;
}
}
// 如果沒有找到則返回nil
return nil;