iOS如何定義名為任意的變量詳解
前言
本文主要介紹了關(guān)于iOS定義名為任意的變量的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。
需求說(shuō)明
在實(shí)際的編程過(guò)程中,我們總要定制一些控件,在定制的過(guò)程里,有時(shí)喜歡自己實(shí)現(xiàn)部分delegate方法
// MYScrollView.m - (instancetype)init { ... self.delegae = self; ... } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { NSLog(@"%s 我被執(zhí)行", __func__); ... }
粗看上述的代碼沒(méi)什么問(wèn)題, 可是當(dāng)我們的其他對(duì)象也想實(shí)現(xiàn)delegate怎么辦呢?
// ViewController.m - (void)viewDidLoad { ... scrollView.delegate = self; ... } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { NSLog(@"%s 執(zhí)行了ViewController里的方法,就不執(zhí)行MYScrollView的方法了", __func__); ... }
實(shí)現(xiàn)
有的同學(xué)會(huì)在ViewController里的方法里在調(diào)用一下UIScrollView的方法,可以我們不知道MYScrollView自己實(shí)現(xiàn)了那些delegate方法啊,只能每個(gè)都轉(zhuǎn)發(fā)一下了.
// ViewController.m - (void)scrollViewDidScroll:(UIScrollView *)scrollView { [(MYScrollView *)scrollView scrollViewDidScroll:scrollView]; ... } ...
這樣做是不是很累?
Objective-C是一門(mén)oop的語(yǔ)言,oop的特性有哪些呢:多態(tài).
可以用這特性去解決這一問(wèn)題:
* 在子類里重寫(xiě)delegate方法,在ViewController里調(diào)用的delegate其實(shí)是子類自己的myDelegate.
* 然后讓父類的delegate指向自己.在子類里實(shí)現(xiàn)的delegate方法里調(diào)用子類的delegate的方法.
// MYScrollView.m @synthesize delegate = _myDelegate; - (instancetype)init { ... [super setDelegate:self]; ... } // 需要掛鉤多少delegate方法就寫(xiě)多少 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { NSLog(@"%s 我先執(zhí)行", __func__); [self.delegate scrollViewDidScroll:scrollView]; } // ViewController.m - (void)viewDidLoad { ... scrollView.delegate = self; ... } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { NSLog(@"%s 我接著被執(zhí)行了", __func__); ... }
這樣子類和ViewController里的delegate方法都被執(zhí)行了.
奇巧有了,按照慣例得說(shuō)說(shuō)無(wú)益了.
嘗試寫(xiě)個(gè)MYTableView.寫(xiě)完后發(fā)現(xiàn),尼瑪?shù)腄ataSource的方法可以掛鉤,Delegate的卻失敗了.
// 筆者用的是tableView:cellForRowAtIndexPath: 和numberOfSectionsInTableView: 兩個(gè)方法
UITableView繼承自UIScrollView,UIScrollViewDelegate的方法卻成功了.
筆者猜測(cè)造成這樣的原因可能是UITableView內(nèi)部用的是self.delegate和_dataSource去執(zhí)行UITableView協(xié)議里的方法.
方法能不能成功,取決于我們看不到的apple的代碼,這個(gè)技巧還怎么去用呢.
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
ios scrollview嵌套tableview同向滑動(dòng)的示例
本篇文章主要介紹了ios scrollview嵌套tableview同向滑動(dòng)的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11IOS利用CocoaHttpServer搭建手機(jī)本地服務(wù)器
這篇文章主要介紹了IOS利用CocoaHttpServer搭建手機(jī)本地服務(wù)器的步驟,幫助大家更好的理解和學(xué)習(xí)使用ios開(kāi)發(fā),感興趣的朋友可以了解下2021-04-04ios開(kāi)發(fā)中時(shí)間轉(zhuǎn)換的方法集錦
這篇文章主要介紹了ios開(kāi)發(fā)中時(shí)間轉(zhuǎn)換的方法集錦,需要的朋友可以參考下2015-05-05IOS實(shí)現(xiàn)上滑隱藏NvaigtionBar而下拉則顯示效果
這篇文章給大家介紹了如何實(shí)現(xiàn)APP上滑時(shí)隱藏navigationBar而下拉則又會(huì)顯示,雖然也是隱藏但是效果和其他完全不一樣,因?yàn)橐郧皼](méi)做過(guò)所以試著去實(shí)現(xiàn)一下,現(xiàn)在分享給大家,有需要的可以參考借鑒。2016-09-09詳解iOS應(yīng)用開(kāi)發(fā)中autoresizing尺寸自動(dòng)適應(yīng)屬性的用法
這篇文章主要介紹了iOS應(yīng)用開(kāi)發(fā)中autoresizing尺寸自動(dòng)適應(yīng)屬性的用法,文中講解了使用代碼和Storyboard兩種方式調(diào)節(jié)autoresizing的方法,示例代碼為Objective-C,需要的朋友可以參考下2016-03-03iOS統(tǒng)計(jì)項(xiàng)目的代碼總行數(shù)
最近一個(gè)項(xiàng)目有段時(shí)間了,不知道怎樣可以統(tǒng)計(jì)出寫(xiě)了多少行代碼,如何處理這個(gè)問(wèn)題呢,下面我們來(lái)探討下。2015-06-06