三、自定義視圖、視圖控制器

1.自定義視圖

  • 自定義視圖:系統標準UI之外,自己組合而出的新的視圖。

在實際開發中,我們經常需要自己定義視圖,積累自己的代碼庫。自己封裝的視圖,能像系統提供的UI控件一樣用于多個項目中,這樣可以提高我們的開發效率。

自定義視圖的步驟:

根據需求的不同,自定義視圖繼承的類也會不同。一般自定義的視圖會繼承自UIView。以下是自定義視圖的要點:

  1. 創建一個UIView子類
  2. 在類的初始化方法中添加子視圖
  3. 類的.h文件提供了一些接口(方法),便于外界操作子視圖。

示例1: 自定義label-textField視圖

假設我們使用LTView類代表label-textField視圖,我們可以創建一個LTView類繼承于UIView。將UIView作為一個容器,在LTView的初始化方法中創建并添加label和textField。

將Label和TextField封裝到LTView中,在一定程度上簡化了我們的代碼。在自定義LTView中我們使用了復合設計模式。

復合設計模式:A類中,使用B類(或者更多類)作為自己的成員(實例變量)。

iOS中復合是特別常見的設計模式,iOS新控件往往都是用已有的控件組合成的。

2. 視圖控制器

UIViewController : 視圖控制器,控制視圖顯示,響應事件。分擔AppDelegate的工作。實現模塊獨立,提高復用性。

視圖控制器的功能:(1)控制視圖大小變換、布局視圖、響應事件。(2)監測以及處理內存警告。(3)檢測以及處理屏幕旋轉。(4)檢測視圖的切換。

自定義視圖控制器:

1> 定義UIViewController的子類
2> 創建視圖控制器對象,作為window的根視圖控制器
3> 在viewDidLoad中使用創建好的對象view

3. 視圖控制器指定自定義的view

UIViewController自帶一個空的view,與需求不符合。視圖控制器只負責控制視圖顯示和響應事件。

自定義View

1> 自定義視圖類繼承于UIView,在初始化方法中添加子視圖控件。

2> 重寫controller的loadView方法。創建自定義視圖對象,并指定為controller的view。

3> 將子視圖控件對象設置為自定義視圖類的屬性,在viewDidLoad方法中進行設置:添加 action、設置delegate等。

4> 在controller中添加按鈕點擊事件的實現和代理方法的實現。

4. MVC概述

MVC是一個框架級的設計模式。M是Model,主要用于建立數據模型(即數據的結構)。V是View,我們看到的所有控件都是view,view的主要功能是展示數據。C是控制器,主要是控制M和V之間的通信。

5. 檢測屏幕旋轉

視圖控制器本身能檢測到屏幕的旋轉,如果要處理屏幕旋轉,需要重寫幾個方法:
(1)supportedInterfaceOrientations (設置設備支持旋轉的方向)

(2)willRotateToInterfaceOrientation:duration:(暫停音樂、關閉視圖交互等)

(3)willAnimateRotationToInterfaceOrientation:duration:(添加自定義動畫等)

(4)didRotateFromInterfaceOrientation:(播放音樂、打開視圖交互等)。

視圖處理

視圖控制器會自動調整view的大小以適應屏幕的旋轉,bounds被修改,觸發view的layoutSubviews方法。view重寫layoutSubviews方法,根據設備方向重新布局。

[UIApplication shareApplication].statusBarOrientation 方法可以提供設備的當前方向。

6. 處理內存警告

控制器能監測內存警告,以便我們避免內存不夠引起的crash。在定義的controller子類中重寫didReceiveMemoryWarning方法。釋放暫時不使用的資源。(數據對象、圖像)

7. 容器視圖控制器

常用方法:

self.view顯示:viewWillAppear:和viewDidAppear:

self.view消失:viewWillDisappear:和viewDidDisappear:

self.view添加到父視圖上時,之行appear方法;當self.view從父視圖上移除時,執行disappear方法。

轉載于:https://www.cnblogs.com/CoderLiLe/p/5538528.html

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

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

相關文章

程序如何在兩個gpu卡上并行運行_深度學習分布式訓練相關介紹 - Part 1 多GPU訓練...

本篇文章主要是對深度學習中運用多GPU進行訓練的一些基本的知識點進行的一個梳理文章中的內容都是經過認真地分析,并且盡量做到有所考證拋磚引玉,希望可以給大家有更多的啟發,并能有所收獲介紹大多數時候,梯度下降算法的訓練需要較…

集成Spring和JavaServer Faces:改進的模板

隨著2.0版的發布&#xff0c;Facelet模板成為JSF規范的核心部分。 使用<ui&#xff1a;composition>和<ui&#xff1a;decorate>標記&#xff0c;可以輕松構建復雜的頁面&#xff0c;同時仍保持標記清晰。 模板在創建HTML表單時特別有用&#xff0c;但是不幸的是&a…

whmcs模板路徑

whmcs網站根目錄 比如你的域名是server.nongbin.vip&#xff0c;你需要cd /home/wwwroot/server.nongbin.vip&#xff0c;該目錄下然后&#xff0c;cd template/ 給文件夾下就是你上傳的模板文件夾轉載于:https://www.cnblogs.com/nongbin/p/6412108.html

系統英偉達gpu驅動卸載_繞過CPU,英偉達讓GPU直連存儲設備

英偉達最近發布了一個新的GPUDirect Storage&#xff0c;暫且叫做GPU直連存儲&#xff0c;讓GPU直接連到NVMe存儲設備上。這一方案用到了RDMA設備來把數據從閃存存儲轉移到GPU本地的內存里&#xff0c;無需經過CPU還有系統內存。如果這一舉措順利的話&#xff0c;英偉達就能擺脫…

37、EnumSet詳解

EnumSet類也是有順序的&#xff0c;EnumSet按照枚舉值在Enum類內定義的順序決定集合元素的順序 EnumSet在內部已位向量的形式存儲&#xff0c;這種存儲方式非常緊湊、搞笑&#xff0c;因此EnumSet占用內存很小&#xff0c;而且運行效率很好。 EnumSet集合不允許加入null元素 En…

嘲弄和存根–了解Mockito的測試雙打

介紹 我遇到的一件事是使用模擬框架的團隊假設他們在模擬。 他們并不知道Mocks只是Gerard Meszaros在xunitpatterns.com上歸類的“測試雙打”之一。 重要的是要意識到每種類型的測試雙精度在測試中都扮演著不同的角色。 用與您需要學習不同模式或重構的方式相同&#xff0c;您…

numpy 辨異(三)—— hstack/column_stack,linalg.eig/linalg.eigh

1. np.hstack np.column_stack >>> np.hstack([np.array([1, 2, 3]), np.array([4, 5, 6])]) array([1, 2, 3, 4, 5, 6])>>> np.column_stack([np.array([1, 2, 3]), np.array([4, 5, 6])]) array([[1, 4],[2, 5],[3, 6]]) 當然對等地&#xff0c;也存在&…

【代碼筆記】iOS-首頁3張圖片變化

一&#xff0c;效果圖。 二&#xff0c;工程圖。 三&#xff0c;代碼。 RootViewController.h #import <UIKit/UIKit.h>interface RootViewController : UIViewController {NSTimer *timer;UIImageView *imageView1;UIImageView *imageView2;UIImageView *imageView3;UIV…

acwing算法提高之動態規劃--數位DP

目錄 1 基礎知識2 模板3 訓練 1 基礎知識 暫無。。。 2 模板 暫無。。。 3 訓練 題目1&#xff1a;度的數量。 解題思路&#xff1a;分類討論。 C代碼如下&#xff0c; #include <iostream> #include <vector>using namespace std;const int N 35; int K,…

python 輸入數字變成密碼_如何在python中檢查數字的“密碼”

我建議使用sets和stdlib中的string包作為可接受字符的列表。在我還建議進行一點重構&#xff0c;以刪除大量帶有if / else分支的嵌套。在import stringupper set(list(string.uppercase))lower set(list(string.lowercase))numbers set(list(string.digits))while True:npw …

使用Eclipse在Amazon Ec2中部署Java Web應用程序的完整指南

嗨&#xff0c;讀者們&#xff0c; 今天&#xff0c;我將向您展示如何使用Eclipse IDE在Amazon EC2中部署簡單的Java Web應用程序。 在我們開始之前&#xff0c;我們需要一些必需的東西&#xff0c; Eclipse Java EE IDE –您可以從http://www.eclipse.org/downloads/下載&…

jquery的load方法

load方法指定一個界面會顯示在目標的標簽內部 比如MVC的一個分部視圖頁面想要顯示在某個標簽里面&#xff0c;可以寫成 $(標簽ID).load&#xff08;分部視圖名稱,data&#xff09; 其中第二個參數可選&#xff0c;主要是一些需要傳遞到該頁面的數據JSON格式組成&#xff0c;發送…

android 錄音原始文件_音頻采集:Android基于AudioRecord的實現

前言這篇文章簡單介紹下移動端Android系統下利用AudioRecord進行音頻采集方法。按照慣例開始前先提供一份源碼 AudioRecordLib 。AudioRecord采集的核心實現在于 AudioRecordCore.java 這個文件。權限申請想要使用AudioRecord這個API&#xff0c;需要在AndroidManifest.xml的配…

Spring 3和Java EE 6 –不公平和不完整的比較

這篇小文章的初稿標題為“ Spring&#xff06;Java EE –比較蘋果和橙子”。 在撰寫本文時&#xff0c;我了解到可以比較Spring Framework和Java EE&#xff0c;但這始終是不公平且不完整的工作。 Java for Enterprise和Spring Framework的發展緊密地聯系在一起。 兩者相互依存…

xml配置文件推薦方式

1.XML幫助類 /// <summary>/// Xml幫助類/// </summary>public class XmlHelper{/// <summary>/// 保存xml/// </summary>/// <typeparam name"T"></typeparam>/// <param name"path"></param>/// <p…

AFNetWorking https SSL認證

一般來講如果app用了web service , 我們需要防止數據嗅探來保證數據安全.通常的做法是用ssl來連接以防止數據抓包和嗅探 其實這么做的話還是不夠的 。 我們還需要防止中間人攻擊&#xff08;不明白的自己去百度&#xff09;。攻擊者通過偽造的ssl證書使app連接到了偽裝的假冒的…

查看環境列表_Xfce 4.14桌面環境正式發布,想要圖形界面又想節省內存?就它了...

1. Xfce 4.14桌面環境正式發布&#xff0c;它有什么新特性&#xff1f;本文主要講解Xfce 4.14桌面環境正式發布&#xff0c;它有什么新特性。Xfce已經開發了4年多&#xff0c;但是這個周末終于看到了期待已久的Xfce 4.14的發布。Xfce 4.14是這個輕量級桌面環境的最新穩定版本&a…

使用Log4jdbc記錄JDBC操作

當我們開發任何應用程序&#xff0c;完成它或結束其任何模塊時&#xff0c;我們都會開始優化過程。 大多數應用程序都包含數據庫訪問權限&#xff0c;并且如果您使用的是ORM &#xff0c;則可能會使用hibernate 。 優化休眠持久層&#xff0c;要求準備閱讀&#xff0c;理解和評…

android BluetoothAdapter藍牙BLE掃描總結

做室內定位的程序員應該都知道&#xff0c;在Android 5.0之后&#xff0c;google推出了藍牙掃描新接口&#xff0c;我們在實測中發現出一些問題&#xff0c;現在給大家列出&#xff0c;以供參考&#xff1a; 1.android 4.3.1(Build.VERSION_CODES.JELLY_BEAN_MR2)增加的startLe…

卷積神經網絡語音識別_用于物體識別的3D卷積神經網絡

本文提出了一種基于CNN的3D物體識別方法&#xff0c;能夠從3D圖像表示中識別3D物體&#xff0c;并在比較了不同的體素時的準確性。已有文獻中&#xff0c;3D CNN使用3D點云數據集或者RGBD圖像來構建3D CNNs&#xff0c;但是CNN也可以用于直接識別物體體積表示的體素。本文中&am…