日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Swift SB 容器 Container View使用

發布時間:2025/7/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Swift SB 容器 Container View使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近比較清閑,就把以前學習的過程記錄下吧,多少年后如果能在互聯網上找到自己的痕跡,想想還是一件蠻值得高興的事情

容器在開發過程中用到的地方還是蠻多的,像網易新聞的框架如果使用代碼去實現的話,調用系統的API

addChildViewController(<#T##childController: UIViewController##UIViewController#>) 復制代碼

使它成為子控制器,加入一個類似的容器里面就可以,具體的大家在做項目過程中都用到過,這里就不多說了。今天就分享一下SB上使用容器類管理VC的控件ContainerView(純代碼里沒有這個控件)

新建個項目(這里我使用的是以前自己隨便寫的一個小demo),在Manstoryboard 的 view 上拖拽兩個ContainerView ,給他們兩個分別設置約束,寬度加起來等于屏幕寬度就可以。拖拽完后你會發現view上多出來兩根線并且關聯到兩個VC。其實這就是containerView 自帶的容器VC,它讓我們可以把代碼和業務都分發到一個獨立的VC里面去操作,耦合性更低。

為了后面的操作我們需要在swift文件里面給這兩個VC綁定兩個Class,取名為Class1 和Class2 都繼承于BaseVC(BaseVC里面只是簡單的對導航欄里面的操作) 。然后要將ContainerView關聯的VC跟我們swift文件里面的類關聯起來,并且綁定它們的storyboardId

到現在的話,基本上容器的使用算是完成了,我們想做的業務就可以分別在兩個vc里面實現了。但是這樣的話就太不直觀了,接著說個例子吧。

現在好多App 都有雙列表,比方說京東的

這個雙列表頁面,我們就能使用ContainerView 來實現類似的效果。

首先我們在Class1 和Class2 里面各自添加兩個tableView 并給他們附上數據,最終的效果是這樣的

這個時候如果我們想做數據的交互,就需要傳值。OC里面的傳值方式有很多,通知,代理,block 等等,其實最簡單的就是使用NSNotificationCenter ,通知比較簡單,我就不說了,swift里面的使用跟OC差不多。這里說一下代理的用法和swift里面閉包的用法

代理在這里的用法

先說下代理,因為我們使用的是容器ContainerView 它會自帶兩個VC,又加上原來的一個VC,相當于三個VC,怎么ContainerView里面取到對應關聯的兩個VC,這是一個關鍵。

在承載連個ContainerView 的VC里面重寫下面的方法

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {} 復制代碼

只需要重寫系統的這個方法,這個方法是SB里面的視圖切換的時候系統會調用的一個方法,它的參數 segue.destination

let vc = segue.destination 復制代碼

返回的就是對應的ContainerView 自帶的VC

因為我們使用了兩個VC 所以要判斷下是具體哪個VC

var class1:Class1? = nilvar class2:Class2? = niloverride func prepare(for segue: UIStoryboardSegue, sender: Any?) {if let vc = segue.destination as? Class1 {class1 = vc}if let vc = segue.destination as? Class2 {class2 = vc}} 復制代碼

取到這兩個VC后,就好辦多了。然后要做的無非就是聲明協議,遵循代理,實現代理方法

protocol XWContainerViewResponseDelegate {func clickWithGetIndex(index:NSIndexPath) } 復制代碼

聲明一個協議,參數為NSIndexPath 類型,然后讓Class1 聲明一個代理屬性

var delegate:XWContainerViewResponseDelegate? 復制代碼

然后在Class1 tabviewVIew 的點擊方法里面調用代理(不需要去調用responds(to: <#T##Selector!#>) delegate? 就相當于OC里面的responds)

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {delegate?.clickWithGetIndex(index: (indexPath as? NSIndexPath)!)} 復制代碼

然后讓Class2 去遵循協議,實現代理方法,這樣就OK了。但是不知道大家有沒有發現,OC使用的時候我們一般都會設置

XXXX.delegate = XXXX 復制代碼

這一步我們還沒有寫,但是這Class1 和 Class2 又是獨立的,沒有關聯。所以這個時候我們就要用到承載這兩個容器所在的VC了,在上面的那個方法里面,我們獲取到了這兩個VC,在這里進行關聯

var class1:Class1? = nilvar class2:Class2? = niloverride func prepare(for segue: UIStoryboardSegue, sender: Any?) {if let vc = segue.destination as? Class1 {class1 = vc}if let vc = segue.destination as? Class2 {class2 = vc}class1?.delegate = class2} 復制代碼

OK,這樣就完整了,點擊Class1 的cell 就會把對應的IndexPath 傳過去,就可以做操作了

閉包在這里的用法

在說下使用閉包傳值的做法 其實核心的地方都在承載兩個ContainerView 所在的VC里面。因為我們所做的操作是想點擊Class1 里面的cell,把對方的Indexpath 給傳過去,那么肯定是想把IndexPath 給回調出去。回調出去之后Class2 怎么去接受呢?其實Class2 也可以有一個閉包專門去接受這個數據,但是這樣就太麻煩了。我們可以在Class2 里面聲明一個屬性,去實現它的屬性觀察器方法,這樣就能隨時監聽這個屬性的變化,更方便的去做操作

首先在class1 里面去聲明閉包,順便給它一個屬性去記錄所要傳遞的IndexPath

typealias CallBack = (_ index:NSIndexPath)->Voidvar xwCallBack:CallBack?var class1Index: NSIndexPath? = nil 復制代碼

Class2 里面的操作 聲明屬性觀察器

var class2Index:NSIndexPath? = nil {willSet {}didSet {print("得到的從1傳過來的值 \(String(describing: class2Index?.row))")}} 復制代碼

然后在Class1 cell的點擊方法里面去調用它

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {xwCallBack!(indexPath as NSIndexPath) } 復制代碼

ContainerView 承載所在的VC 讓Class1 實現閉包

var class1:Class1? = nilvar class2:Class2? = niloverride func prepare(for segue: UIStoryboardSegue, sender: Any?) {if let vc = segue.destination as? Class1 {class1 = vc}if let vc = segue.destination as? Class2 {class2 = vc}unowned let weakSelf = selfclass1?.xwCallBack = { index inweakSelf.class2?.class2Index = index}} 復制代碼

然后把Class1傳過來的IndexPath 賦值給Class2的 帶有屬性觀察器的屬性。OK,這樣就可以了

其實swift 里面的東西 大致跟OC用法還是一樣的,只不過增加了一些確實特別好用的東西。無論什么方法,用到好就行。黑貓白貓,逮到老鼠就是好貓

一起學習吧。。。

總結

以上是生活随笔為你收集整理的Swift SB 容器 Container View使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 激情噜噜 | 性xx紧缚网站 | 国产精品色婷婷99久久精品 | 人人爱av| www.youji.com| 日本公妇乱淫免费视频一区三区 | 免费a v视频 | 高清国产一区二区三区 | 色香五月 | 亚洲精选在线观看 | 国产精品第13页 | 亚洲一久久 | 毛片aa | 久久网页 | 91传媒视频在线观看 | 欧美黄色一级生活片 | 国产精品免费电影 | 捆绑调教sm束缚网站 | 久久夜视频 | 日本人视频69式jzzij | 男人与雌性宠物交啪啪 | 中文字幕精品久久久久人妻红杏1 | 玉女心经 在线 | 新红楼梦2005锦江版高清在线观看 | 亚洲天堂手机 | 国产免费一区二区三区视频 | 欧美自拍第一页 | 久99久视频 | 成人午夜在线视频 | h狠狠躁死你h高h | 精品午夜视频 | a级一级片 | 94av| 日本女优中文字幕 | 91视频观看 | 男人天堂网在线视频 | 密桃成熟时在线观看 | 天堂新版8中文在线8 | 亚洲一区二区免费 | 丝袜美腿中文字幕 | 亚洲精品91 | 三级亚洲| 日韩av在线播放观看 | 久久精品视频6 | 大学生高潮无套内谢视频 | 成为性瘾网黄的yy对象后 | 中文有码在线 | 精品无码一级毛片免费 | 777精品视频 | 欧美色精品在线 | 日韩大尺度在线观看 | 精品国产美女 | 中文字幕 成人 | 蜜桃视频一区二区 | 国产高潮又爽又无遮挡又免费 | 国产精品无码一区二区桃花视频 | 日韩欧美高清片 | 日本乱偷人妻中文字幕在线 | 日韩亚洲欧美综合 | 性高潮免费视频 | 亚洲91在线 | 久久久青 | 欧美日本黄色 | 日韩欧美片 | 亚洲24p | 中日韩精品一区二区三区 | 日韩精品免费 | 欧美激情成人网 | 亚洲中文字幕无码av永久 | 精品人妻少妇一区二区 | 国产精品一区二区性色av | 国产欧美激情在线观看 | 91艹 | 国产在线精品一区 | xxxx亚洲 | 国产成人高清在线 | 东北女人av | 精品亚洲一区二区三区四区五区高 | 91小仙女jk白丝袜呻吟 | 抽插丰满内射高潮视频 | 久久久久99精品成人片直播 | 国产亚洲区 | 欧美日韩一区二区三区四区五区六区 | 中文字幕人成乱码熟女香港 | 黄色一级视频在线观看 | 伊久久 | 国产传媒一区二区三区 | 天堂av2021| 久久激情综合 | 网站在线看 | 视频在线观看一区二区三区 | 日韩精品一区二区三区在线 | 男女h网站 | 午夜精品福利一区二区 | 免费播放片大片 | 黄色av大片 | 春意影院福利社 | 国产第20页 | 欧美毛片网站 |