Delegate簡(jiǎn)單使用

delegate 簡(jiǎn)單介紹

監(jiān)聽(tīng)scrollView各種行為的3大步驟(比如讓控制器監(jiān)聽(tīng)scrollView的行為)

  • 設(shè)置scrollView的delegate(代理)為控制器對(duì)象
scrollView.delegate = 控制器;
  • 控制器要遵守UIScrollViewDelegate協(xié)議
@interface 控制器 ()  <UIScrollViewDelegate>

@end
  • 控制器要實(shí)現(xiàn)UIScrollViewDelegate協(xié)議里面的代理方法
#pragma mark - <UIScrollViewDelegate>  代理方法
/**
 *  只要scrollView在滾動(dòng)稿存,就會(huì)調(diào)用這個(gè)方法(監(jiān)聽(tīng)scrollView的滾動(dòng))
 */
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    NSLog(@"scrollViewDidScroll");
}

代理使用的一般規(guī)律

  • 作用:用來(lái)監(jiān)聽(tīng)控件的某些行為
  • 代理:是控制器對(duì)象
  • 代理:是id類(lèi)型笨篷,并且是弱指針
  • 代理協(xié)議的格式:控件類(lèi)名Delegate,比如UIScrollViewDelegate瓣履、UITextFieldDelegate
  • 代理方法:方法名一般是控件名開(kāi)頭率翅,比如UIScrollView的代理方法一般以scrollView開(kāi)頭

如何監(jiān)聽(tīng)控件的行為

  • 通過(guò)addTarget:
    • 只有繼承自UIControl的控件,才有這個(gè)功能
    • UIControlEventTouchUpInside : 點(diǎn)擊事件(UIButton)
    • UIControlEventValueChanged : 值改變事件(UISwitch袖迎、UISegmentControl冕臭、UISlider)
    • UIControlEventEditingChanged : 文字改變事件(UITextField)
  • 通過(guò)delegate
    • 只有擁有delegate屬性的控件,才有這個(gè)功能

NSTimer的使用

  • 開(kāi)啟定時(shí)器
@property (nonatomic, weak) NSTimer *timer;

// 返回一個(gè)自動(dòng)開(kāi)始執(zhí)行任務(wù)的定時(shí)器
self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextPage:) userInfo:@"123" repeats:YES];

// 修改NSTimer在NSRunLoop中的模式:NSRunLoopCommonModes
// 主線程不管在處理什么操作燕锥,都會(huì)抽時(shí)間處理NSTimer
[[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
  • 關(guān)閉定時(shí)器
[self.timer invalidate];

代理的使用步驟

代理的使用步驟

  • 定義一份代理協(xié)議
    • 協(xié)議名字的格式一般是:類(lèi)名 + Delegate
      • 比如UITableViewDelegate
    • 代理方法細(xì)節(jié)
      • 一般都是@optional
      • 方法名一般都以類(lèi)名開(kāi)頭
        • 比如- (void)scrollViewDidScroll:
      • 一般都需要將對(duì)象本身傳出去
        • 比如tableView的方法都會(huì)把tableView本身傳出去
    • 必須要遵守NSObject協(xié)議
      • 比如@protocol XMGWineCellDelegate <NSObject>
  • 聲明一個(gè)代理屬性
    • 代理的類(lèi)型格式:id<協(xié)議> delegate
@property (nonatomic, weak) id<XMGWineCellDelegate> delegate;
  • 設(shè)置代理對(duì)象
xxx.delegate = yyy;
  • 代理對(duì)象遵守協(xié)議辜贵,實(shí)現(xiàn)協(xié)議里面相應(yīng)的方法

  • 當(dāng)控件內(nèi)部發(fā)生了一些事情,就可以調(diào)用代理的代理方法通知代理

    • 如果代理方法是@optional归形,那么需要判斷方法是否有實(shí)現(xiàn)
if ([self.delegate respondsToSelector:@selector(wineCellDidClickPlusButton:)]) {
    [self.delegate wineCellDidClickPlusButton:self];
}

iOS監(jiān)聽(tīng)某些事件的方法

  • 通知(NSNotificationCenter\NSNotification)
    • 任何對(duì)象之間都可以傳遞消息
    • 使用范圍
      • 1個(gè)對(duì)象可以發(fā)通知給N個(gè)對(duì)象
      • 1個(gè)對(duì)象可以接受N個(gè)對(duì)象發(fā)出的通知
    • 必須得保證通知的名字在發(fā)出和監(jiān)聽(tīng)時(shí)是一致的
  • KVO
    • 僅僅是能監(jiān)聽(tīng)對(duì)象屬性的改變(靈活度不如通知和代理)
  • 代理
    • 使用范圍
      • 1個(gè)對(duì)象只能設(shè)置一個(gè)代理(假設(shè)這個(gè)對(duì)象只有1個(gè)代理屬性)
      • 1個(gè)對(duì)象能成為多個(gè)對(duì)象的代理
    • 通知規(guī)范
    • 建議使用代理多于通知
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末托慨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子暇榴,更是在濱河造成了極大的恐慌厚棵,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,126評(píng)論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔼紧,死亡現(xiàn)場(chǎng)離奇詭異婆硬,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)奸例,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門(mén)柿祈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人哩至,你說(shuō)我怎么就攤上這事∶圩裕” “怎么了菩貌?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,941評(píng)論 0 366
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)重荠。 經(jīng)常有香客問(wèn)我箭阶,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,294評(píng)論 1 300
  • 正文 為了忘掉前任仇参,我火速辦了婚禮嘹叫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诈乒。我一直安慰自己罩扇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布怕磨。 她就那樣靜靜地躺著喂饥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肠鲫。 梳的紋絲不亂的頭發(fā)上员帮,一...
    開(kāi)封第一講書(shū)人閱讀 52,874評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音导饲,去河邊找鬼捞高。 笑死,一個(gè)胖子當(dāng)著我的面吹牛渣锦,可吹牛的內(nèi)容都是我干的硝岗。 我是一名探鬼主播,決...
    沈念sama閱讀 41,285評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼泡挺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼辈讶!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起娄猫,我...
    開(kāi)封第一講書(shū)人閱讀 40,249評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤贱除,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后媳溺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體月幌,經(jīng)...
    沈念sama閱讀 46,760評(píng)論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評(píng)論 3 343
  • 正文 我和宋清朗相戀三年悬蔽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扯躺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,973評(píng)論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蝎困,死狀恐怖录语,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情禾乘,我是刑警寧澤澎埠,帶...
    沈念sama閱讀 36,631評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站始藕,受9級(jí)特大地震影響蒲稳,放射性物質(zhì)發(fā)生泄漏氮趋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評(píng)論 3 336
  • 文/蒙蒙 一江耀、第九天 我趴在偏房一處隱蔽的房頂上張望剩胁。 院中可真熱鬧,春花似錦祥国、人聲如沸昵观。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,797評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)索昂。三九已至,卻和暖如春扩借,著一層夾襖步出監(jiān)牢的瞬間椒惨,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,926評(píng)論 1 275
  • 我被黑心中介騙來(lái)泰國(guó)打工潮罪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留康谆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,431評(píng)論 3 379
  • 正文 我出身青樓嫉到,卻偏偏與公主長(zhǎng)得像沃暗,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子何恶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 掌握 UIScrollView的常見(jiàn)屬性 UIScrollView的常用代理方法 UIScrollView的縮放 ...
    JonesCxy閱讀 2,737評(píng)論 1 12
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,348評(píng)論 25 707
  • *面試心聲:其實(shí)這些題本人都沒(méi)怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,171評(píng)論 30 470
  • 開(kāi)篇語(yǔ) 不得不說(shuō)孽锥,這本書(shū)寫(xiě)的夠絮叨,作者就是這個(gè)風(fēng)格的细层。 另外惜辑,也不得不說(shuō),華章心理這個(gè)策劃?rùn)C(jī)構(gòu)疫赎,策劃的書(shū)也真的是...
    2018年注定不平凡閱讀 1,245評(píng)論 1 3
  • 因?yàn)橛嗲镉甑摹侗Щ鄙轿鳌肥⒊牛瑢?duì)山西有了向往,想見(jiàn)證一下晉商的風(fēng)采捧搞。在這之前并不知道山西有什么名勝古跡抵卫,自然也就不知道...
    何C呀閱讀 458評(píng)論 0 0