the QuickDialog class layout analysis

QuickDialog可以幫助開發者快速創建復雜的表單,實現包括登錄界面在內的各種樣式的TableView輸入界面,此外,還可以創建帶有多個文本域的表格及項目。
QuickDialog通過對數據元素的峰值封裝,根據不同元素的使用來簡化UITableView的使用。
為了使用QuickDialog你必須知道三個不同的類:
QuickDialogController——是UITableViewController的子類,用于顯示對話框在你的應用中你可能會創建這個類的子類來顯示。
QRootElement——一個對話框的根元素,sections與cells的容器,用戶顯示用戶數據。每一個QuickDialogController一次只可以顯示一RootElement。可以包含其他的rootElement的。
QElement——一個element映射一個UItableViewCell,盡管它包括更多的功能,像能夠從cell中讀取值和有多個類型。QuickDialog也提供了多種內建element type,像 ButtonElement 和 EntryElement,但你也能夠創建自己的element。

一 關于Elements

* QuickDialog 提供了可以應用于app的很多不同elements。
* QLabelElement: 簡單的內建鍵值對映射
* QBadgeElement: 想label cell,但值是作為一個徽標顯示的
* QBooleanElement: 顯示一個開關
* QButtonElement: 在中間顯示一個標題想一個button一樣
*QDateTimeElement:允許你編輯dates,time,或者date + time值。編輯發生在新樸實出來的viwController中。
* QEntryElement: 輸入字段,允許你收集用戶的信息。可以自動擴展。
* QDecimalElement: 非常想一個可輸入的field,但是只允許輸入數字。可以預定義輸入的精度。
* QFloatElement: 顯示一個滑動欄
* QMapElement: 當被選中時,顯示一個有location的全屏地圖,需要經緯度值。
* QRadioElement:允許用戶從多個可利用的選項中選擇一個。自動push一個新的有已被選中的item的table。
* QTextElement: 可提供字體渲染的自由文本
* QWebElement: push一個在element中定義URL的簡單瀏覽頁面。 `

下面看下QuickDialog中element的繼承關系:


the element class

二 關于Sections

  • sections 是一個簡單的elements分組,默認情況下有一下幾種特性:
  • title/footer:頁眉/頁腳部分顯示為簡單的字符串
  • headerView/footerView:這種情況下,Views可以替換掉titles的顯示,可以簡單的顯示圖片或自定義的Views

關于sections的結構圖如下:


the Sections class
* QRadioSection:內聯的顯示多個選項,而不是到另一個UIViewController中。
* QSortingSection:自動在sections中對cells進行排序。

三 關于自定義的UITableViewCell

在QuickDialog中自定義了一部分的UITableViewCell,來對應于定義的elements。其結構如下:


the custom UITableViewCell

四 關于QuickDialog的使用

集成QucikDialog到項目中\n 最簡單的方法是把quickDialog作為git子模塊添加到你的現有工程中,然后作為一部分導入到project中。 Terminal:

cd your-project-location git submodule add git@github.com:escoz/QuickDialog.git

這種方法是從github中自動copy的,因此你在將來可以方便的更新。

在XCode中: 打開已存在的project(或者創建個新的) 把從github分支上下載QuickDialog.xcodeproj拖拽到你的工程中(root或framework下) 在工程配置下:

* 在Build Phases,添加QuickDialog(the lib, not the example app)作為目標依賴
* 在Build Phases->Link binary with libraries下,添加這兩個庫:MapKit.framework and CoreLocation.framework
* 在Link binary with libraries下添加這個QuickDialog.a靜態庫
* 在你的prefix.pch未見中,添加#import
* 在你的工程配置中的“Build Settings”下 本地的"User Header Search Paths"設置,并設置值為"${PROJECT_DIR}/QuickDialog"(包括引號!)并且勾選"Recursive"選項。
* Debug值應當已經被設置,如果沒有,修改它。
* 本地的 “Always Search User Paths”設置為YES
* 最后找到 “Other Linker Flags”選擇項,并且添加至-ObjC 

***OK,that should be all there is. Here’s how you can create and display your first dialog from inside another UIViewController:

 QRootElement *root = [[QRootElement alloc] init]; 
 root.title = @"Hello World"; 
 root.grouped = YES; 
 QSection *section = [[QSection alloc] init]; 
 QLabelElement *label = [[QLabelElement alloc] initWithTitle:@"Hello" Value:@"world!"];
[root addSection:section]; 
[section addElement:label];

UINavigationController *navigation = [QuickDialogController controllerWithNavigationForRoot:root]; 
[self presentModalViewController:navigation animated:YES];

The code above will create the form below:


the custom UITableViewCell

五:QuickDialog的數據交互

由于QuickDialog是通過對數據的封裝實現對UI的控制的,所以要獲得數據的話有兩種方式,一種是直接通過elements的屬性獲取,一種是通過bind的對應鍵值來使用fetchValueUsingBindingsIntoObject來拉去的。這樣的話必須bind中的key與放入對象的attribute的名稱要一直,否則會拉去不到crash。

對QuickDialogTableView的點擊事件可以直接設置block來進行控制,這樣較容易控制的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,462評論 2 378

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,718評論 25 708
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,824評論 18 139
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,733評論 18 399
  • I always miss you , so I miss you , so I miss you , so...
    大寶biubiubiu閱讀 261評論 0 1
  • 每一個冬天我都感激無比難熬 寒冷 孤獨 還有一個個漫長的夜晚 逃不開的痛和想自殺的念頭 我巨蟹座。我一直都覺得是我...
    fitFIT閱讀 202評論 0 0