一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>通訊/手機(jī)編程>

iOS 開發(fā)中的自我管理模式

大小:0.3 MB 人氣: 2017-09-26 需要積分:1

  使用這個控件的人只需要調(diào)用這個 configure 方法就可以配置入?yún)⒑褪录幚?。但隨之而來的就是一些蛋疼的問題:

  configure 的調(diào)用者是 superview,上面的例子中也就是一個 UITableViewCell,但 Cell 這層并不知道自己的 ViewController 是誰,于是乎還得向上一級傳遞這個點(diǎn)擊事件,直到能獲取到 NavigationController,然后 Push 一個用戶信息的頁面。

  這個 Avatar View 在 App 的各個地方都可能粗線,而且行為一致,那就意味著事件處理的 block,要散落在各個頁面中,同時也帶來了很多“只是為向上一層級轉(zhuǎn)發(fā)事件”的 “Middle Man”

  為解決這個問題,就需要給這個 View 放權(quán),讓其自己 Handle 自己的事件,也就是 Self-Managed,為了不破壞 View 的純潔性,比較好的實踐是在 Category 中實現(xiàn):

  @interface?FDAvatarView?(FDAvatarViewSelfManager)

  -?(void)selfManagedConfigureWithAvatarURL:(NSURL?*)URL?VIPInfo:(id)info?uid:(NSString?*)uid;

  @end

  實現(xiàn)時最好要調(diào)用 View 主類提供的 API:

  @implementation FDAvatarView (FDAvatarViewSelfManager)

  // 為后一個頁面的創(chuàng)建增加了個 UID 參數(shù)

  - (void)selfManagedConfigureWithAvatarURL:(NSURL *)URL VIPInfo:(id)info UID:(NSString *)UID {

 ?。踫elf configureWithAvatarURL:URL VIPInfo:info tapped:^{

  // 假設(shè) App 結(jié)構(gòu)是 Root -》 TabBar -》 Navigation -》 ViewController

  UITabBarController *tabBarControler = (id)[UIApplication.sharedApplication.delegate.window.rootViewController;

  UINavigationController *navigationController = tabBarControler.selectedViewController;

  // 創(chuàng)建用戶信息 View Controller

  FDUserProfileViewController *profileViewController = [FDUserProfileViewController viewControllerWithUID:UID];

  [navigationController pushViewController:profileViewController animated:YES];

  }];

  }

  @end

  這里用到了類似 AOP 的思路,添加了對 App 層級的耦合,如果覺得這樣的耦合方式不妥的話,也可以封裝個全局方法去取到當(dāng)前頂層的 Navigation Controller。

  這樣,F(xiàn)DAvatarView 的調(diào)用者只需要配置入?yún)?,其余的它自己全能搞定了,即?App 內(nèi)很多處出現(xiàn)頭像,邏輯代碼也只有一份。

  接下來再來個例子:

  iOS 開發(fā)中的自我管理模式

  這個點(diǎn)贊的按鈕功能上有幾個職責(zé):

  顯示已有的點(diǎn)贊數(shù)

  點(diǎn)擊按鈕后執(zhí)行一個小動畫,點(diǎn)贊數(shù) +1,同時發(fā)送網(wǎng)絡(luò)請求。

  若已經(jīng)點(diǎn)贊,點(diǎn)擊執(zhí)行反向操作

  若網(wǎng)絡(luò)請求發(fā)送失敗,則回退成點(diǎn)擊前的狀態(tài)

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?