UIViewController 小結

1 生命周期

  1. init方法中view仍然是nil,此時,如果寫了self.view,直接調用loadView。
  2. 看名字也知道,loadView在viewDidLoad之前。
  3. initWithNibName:bundle:,designated初始化方法

2 代碼組織

  1. init,只有需要傳一些參數的時候,才需要 不要出現self.view,只做普通屬性賦值(如model,詳情頁url等)
  2. viewDidLoad中 組裝好subview
  3. viewWilAppear中 處理數據相關,處理系統級任務(比如statusbar、網絡監聽等)
  4. viewDidLayoutSubviews中 處理布局
  5. subview在getter中初始化
  6. 瘦身 ViewModel/Present + category、RAC

一個不符合規范的案例,會導致錯誤。

//first vc
+ (instancetype)initWithUrl:(NSString *)url {ViewController *controller = [ViewController new];    //已經在next vc的init中執行了viewDidLoad,而此時url還沒有傳過去controller.url = url;return controller;
}//next vc
#pragma mark - life cycle
- (instancetype)init {self = [super init];if(self) {[self.view addSubview: self.webView];   //應該寫在viewDidLoad中}return self;
}- (void)viewDidLoad {    //下面兩句應該寫在viewWillAppear:中[self startLoading];[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.url]]];
}
復制代碼

3 一些應用

3.1 ChildVC + ScrollView

比如頭條,上面有一個橫拉的欄目View,下面才是ChildVC的view 做法:ScrollView + VCs

  • ScrollView中實際上是多個childVC的根view
  • 創建childVC的時候,設置好frame,包括橫向偏移量。

注意

  1. 因為[scrollView addSubview:childVC.view],已經調用了childVC.view,所以這是已經調用了childVC的loadView和viewDidLoad方法。
  2. addChildViewController后,childVC的生命周期方法,如viewWillAppear、viewDidAppear等,就跟隨父VC了自動處理。

優化:

  1. 可以使用displayVC,cachedVCs,緩存數組,內存預警或進入后臺時清理cachedVCs。
  2. 點擊專欄引發的更換VC,
/添加一個 childViewController
UIViewController *vc = [UIViewController new];
[self addChildViewController:vc];
vc.view.frame = ..;
[self.view addSubview:vc.view];
[vc didMoveToParentViewController:self];//移除一個 childViewController
[vc willMoveToParentViewController:nil];
[vc.view removeFromSuperview];
[vc removeFromParentViewController];
復制代碼

3.2 ChildVC + UIPageViewController

實現相冊瀏覽功能,圖片放縮

4 通用做法

4.1 隱藏狀態欄

#pragma mark - statusbar
-(BOOL)prefersStatusBarHidden {return YES;
}
復制代碼

轉載于:https://juejin.im/post/5d077f815188252354279659

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277518.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277518.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277518.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

多核學習方法介紹

通過上篇文章的學習,我們知道,相比于單個核函數,多核模型可以具有更高的靈活性。經過多個核函數映射后的高維空間是由多個特征空間組合而成的組合空間,而顯然組合空間可以組合各個子空間不同的特征映射能力,能夠將異構…

java注解類型_Java注解類型

本篇文章幫大家學習java注解類型,包含了Java注解類型使用方法、操作技巧、實例演示和注意事項,有一定的學習價值,大家可以用來參考。標記注解類型標記注解類型是沒有元素的注解類型,甚至沒有默認值。標記注解由注解處理工具使用。…

linux go環境安裝和基本項目結構

最近項目中要用到Go語言,所以簡單總結一下安裝和配置,Go這個語言本身就限定了很多規范,比如項目設置,編程風格等,開發中就不需要再因為各種規范問題糾結了,直接用官方規定的能避免很多坑,下面直…

運輸層

運輸層-TCP 簡介 通俗點來說,運輸層是連接底層和用戶層的,運輸層向它上面的應用層提供通信服務,它屬于通信部分的最高層,同時也是用戶功能的最低層。 運輸層重要功能是復用和分用。復用:發送方不同應用進程可以使用同一…

對AI"出錯"零容忍?美國加強AI推理解釋能力研究

隨著硅谷私企引領人工智能(AI)爆發式發展,美國國防部曾發布報告稱,將“立即采取行動”加速AI和自動化技術研發。據《麻省理工技術評論》雜志網站近日報道,美國國防高級研究計劃局(DARPA)已經著手…

java調用指定瀏覽器_Java調用瀏覽器打開網頁完整實例

本文實例講述了java調用瀏覽器打開網頁的方法。分享給大家供大家參考。具體實現方法如下:package com.yifang.demo;import java.io.file;public class openpagedemo {public static void main(string[] args) {try {//string url "http://www.baidu.com"…

[HDU517] 小奇的集合

題目鏈接 顯然有貪心每次選擇最大的兩個數來做。 于是暴力地把最大的兩個數調整到非負(暴力次數不超過1e5),接下來使用矩陣乘法即可。 \[ \begin{pmatrix} B\\S\\T \end{pmatrix} \begin{pmatrix} 1&1&0\\ 1&0&0\\ 1&1&…

phpStudy

很多朋友在學習php的過程中會看到phpstudy這個東西,那么phpstudy是做什么的呢?有什么用?接下來的這篇文章將個大家來詳細的介紹一下phpstudy的內容。 首先在百度百科上對于phpstudy的定義是一個PHP調試環境的程序集成包。 該程序包集成最新的…

殺入共享汽車市場的PonyCar,是下一個犧牲者還是引領者?

曾幾何時,汽車是財富、地位的象征,擁有一輛汽車就感覺自己處處高別人一等。但如今,汽車已然成為一件隨處可見的商品,甚至已經到車來車往、熙熙攘攘的地步。根據中商產業研究院發布的《2018-2023年中國汽車行業市場前景及投資機會研…

python圖片內容長度識別_Python實現識別圖片內容的方法分析

本文實例講述了Python實現識別圖片內容的方法。分享給大家供大家參考,具體如下:python識別圖片內容。這里我的環境為windows64位,python2.7.14需要用到PIL模塊和tesseract模塊。首先需要安裝pip包管理,安裝方法可參考附錄windows下…

AJAX工具

代碼如下 var AppAjax {baseUrl:AppConfig.apiUrl//【POST請求】,post:function(pUrl,pData,pSuccessFun){pUrl AppAjax.baseUrl pUrl;$.ajax({headers: {token: AppConfig.token},url:pUrl,type:POST,data:JSON.stringify(pData),//pData,//JSON.stringify(),contentType:&q…

厲害了!Intel第九代酷睿參數曝光

2019獨角獸企業重金招聘Python工程師標準>>> 導讀上周有消息稱,Intel第九代酷睿處理器最快于8月1日發布,共有三款主打產品,分別是i9-9900K、i7-9700K和i5-9600K。其中,i9-9900K設計為8核16線程,基礎主頻3.6…

java 連接kafka_設置多個kafka連接接收器

我正在研究從postgreSQL到HDFS的數據流 . 我在HDP 2.6沙箱上設置了融合環境 . 我對postgreSQL的jdbc源配置是namejdbc_1connector.classio.confluent.connect.jdbc.JdbcSourceConnectortasks.max1connection.urljdbc:postgresql://host:port/db?currentSchemaschema&useru…

Web應用性能分析工具—HAR文件

Web應用性能分析工具—HAR文件 來源 https://raynorli.com/2018/06/11/web-performance-analysis-har-file/ 客戶經常有的一個問題就是,我的網頁服務通過你的設備之后,訪問變慢了,這類直觀感受的故障很不好量化,而且基于Web應用的…

【mybatis】mybatis多表聯查,存在一對多關系的,實體中使用List作為字段接收查詢結果的寫法...

實體如下: IntegralGoods  積分商品 IntegralGoodsImg  積分商品圖片 ShelfLog    積分商品自動上架記錄 IntegralGoods :IntegralGoodsImg:ShelfLog   1:n:1 1:1的多表聯查或者m:n的多表聯查 很簡…

lr java腳本_【上海校區】 LR Java腳本編寫方法

之前在某一家銀行也接觸過java寫的性能接口腳本,最近因項目,也需編寫java接口性能測試腳本,腦袋一下懵逼了,有點不知道從何入手。隨后上網查了相關資料,自己又稍微總結了一下,與大家共同分享哈~   首先&a…

Flask Web表單

title: flask學習筆記 subtitle: 3. flask Web表單 date: 2018-12-14 10:17:28 --- Web表單 HTML表單是用戶和web站點或應用程序之間交互的主要內容之一。它們允許用戶將數據發送到web站點。大多數情況下,數據被發送到web服務器,但是web頁面也可以自己攔…

一些PHP函數功能

函數 描述 PHP basename() 返回路徑中的文件名部分。 3 chgrp() 改變文件組。 3 chmod() 改變文件模式。 3 chown() 改變文件所有者。 3 clearstatcache() 清除文件狀態緩存。 3 copy() 復制文件。 3 delete() 參見 unlink() 或 unset()。 dirname() 返回路徑中的目錄名稱部分…

mac java tomcat_mac idea 配置tomcat

mac idea 配置tomcat一、下載安裝tomcat二、有一個 javaWeb項目創建一個javaWeb項目 ,參考第一條,只是在第二步的時候選中java Web就行三、完善web項目在WEB-INF 下新建兩個文件夾,lib(存放jar包)和classes(存放編譯后的文件)打開項目結構設置配置classe…

30342程序格式

1.匯編語言程序格式 2.表達式操作符 轉載于:https://www.cnblogs.com/ZanderZhao/p/11055237.html