<th id="ik4gr"><pre id="ik4gr"></pre></th>
<rp id="ik4gr"></rp>
    <dd id="ik4gr"></dd>

  1. <rp id="ik4gr"><object id="ik4gr"><blockquote id="ik4gr"></blockquote></object></rp>
      <rp id="ik4gr"></rp>
        <button id="ik4gr"><acronym id="ik4gr"></acronym></button>
      1. <rp id="ik4gr"><object id="ik4gr"><input id="ik4gr"></input></object></rp>
        1. 杭州嵌入式培訓
          達內杭州嵌入式培訓中心

          13175137725

          IOS Swift實戰開發經驗分享

          • 時間:2019-03-08 11:25
          • 發布:轉載
          • 來源:網絡

          本文小編為大家分享的是IOS Swift實戰開發經驗,一起來看看吧。

          swift中沒有宏的概念,pch文件也沒有OC中這么簡單

          所以如果我們要定義一個全局變量,比如顏色,一般使用let直接定義

          /**
          
          * 顏色定義
          
          */
          
          let iCocosCommonBgColor = UIColor(red: (215)/255.0, green: (215)/255.0, blue: (215)/255.0, alpha:1.0)
          
          使用字典的方法設置導航欄的主題
          
          在swift中設置導航欄的主題我們同樣使用字典實現,但是卻和OC大不一樣,筆者也是弄了很久才成功,因為之前都只是簡單的使用字典,下面就來看看咱們應該怎么做:
          
          1 //獲取tabBarItem主題
          
          2 var tabBar : UITabBarItem = UITabBarItem.appearance()
          
          3
          
          4 //設置文字不同狀態的顏色
          
          5 let dictNor = NSDictionary(object: UIColor.grayColor(), forKey: NSForegroundColorAttributeName)
          
          6 let dictHigh = NSDictionary(object: UIColor.orangeColor(), forKey: NSForegroundColorAttributeName)
          
          7
          
          8 //設置文字的大小
          
          9 let dictFont = NSDictionary(object: UIFont.systemFontOfSize(12.0), forKey: NSFontAttributeName)
          
          10
          
          11 //使用上面的字典設置主題屬性
          
          12 tabBar.setTitleTextAttributes(dictNor as [NSObject : AnyObject], forState: UIControlState.Normal)
          
          13 tabBar.setTitleTextAttributes(dictHigh as [NSObject : AnyObject], forState: UIControlState.Selected)
          
          14
          
          15 tabBar.setTitleTextAttributes(dictFont as [NSObject : AnyObject], forState: UIControlState.Normal)

          實現每個子控制器左邊返回按鈕,還原手勢返回功能

          1:首先遵守協議

          UIGestureRecognizerDelegate

          2:設置代理

          //設置手勢代理
          
          self.interactivePopGestureRecognizer.delegate = self

          3:實現push方法

          1 //實現push方法,處理后面的業務邏輯
          
          2 override func pushViewController(viewController: UIViewController, animated: Bool) {
          
          3
          
          4 //判斷是否是根控制器
          
          5 if self.childViewControllers.count > 0 {
          
          6
          
          7 //如果不是根控制器,則隱藏底部的tabBar
          
          8 viewController.hidesBottomBarWhenPushed = true
          
          9
          
          10 /**
          
          11 * 創建一個按鈕,并且設置對應的屬性
          
          12 */
          
          13
          
          14 //初始化
          
          15 var btn: UIButton = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton
          
          16
          
          17 //frame
          
          18 btn.frame = CGRectMake(0, 2, 70, 30)
          
          19
          
          20 //設置位子及文字不同狀態的顏色
          
          21 btn.setTitle("返回", forState: UIControlState.Normal)
          
          22 btn.setTitleColor(UIColor.grayColor(), forState: UIControlState.Normal)
          
          23 btn.setTitleColor(UIColor.redColor(), forState: UIControlState.Highlighted)
          
          24
          
          25 //設置不同狀態的圖片
          
          26 btn.setImage(UIImage(named: "navigationButtonReturn"), forState: UIControlState.Normal)
          
          27 btn.setImage(UIImage(named: "navigationButtonReturnClick"), forState: UIControlState.Highlighted)
          
          28
          
          29 //設置內容和圖片的邊距
          
          30 btn.contentEdgeInsets = UIEdgeInsetsMake(0, -15, 0, 0)
          
          31 btn.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 10)
          
          32
          
          33 //設置每一個子控制器的左邊為我們自定義的放回按鈕
          
          34 viewController.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: btn)
          
          35
          
          36 //添加點擊事件
          
          37 btn.addTarget(self, action: "backClcik", forControlEvents: UIControlEvents.TouchUpInside)
          
          38 }
          
          39
          
          40 //設置全局背景顏色
          
          41 viewController.view.backgroundColor = iCocosCommonBgColor
          
          42
          
          43 //push進入下一個控制器
          
          44 super.pushViewController(viewController, animated: true)
          
          45 }

          4:實現返回按鈕方法

          //點擊放回按鈕返回到上一個控制器func backClcik() { self.popViewControllerAnimated(true) }

          5:實現子控制器的手勢返回

          //根據上面遵守的協議和設置的代理,在這個方法中設置子控制器可以實現點手勢返回功能func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) ->Bool {returnself.childViewControllers.count >0} }
          
          swift控制器切換
          
          關于控制器的切換swift喝Objective—C中并沒有太多的區別(這里只說兩種,其他的在下面的文章中會介紹到),最大的也就是布爾值的寫法
          
          Objective—C:YES和NO
          
          swift:true和false
          
          下面來看看兩者的實現
          
          OC版
          
          模態方式
          
          [self presentViewController:vc animated:YES completion:nil]; [self dismissViewControllerAnimated:YES completion:nil];
          
          push方式
          
          [self.navigationController pushViewController:vc animated:YES]; [self.navigationController popViewControllerAnimated:YES];
          
          Swift版
          
          模態方式
          
          self.presentViewController(vc, animated:true, completion: nil) self.dismissViewControllerAnimated(true, completion: nil)
          
          push方式
          
          self.navigationController?.pushViewController(vc, animated:true) self.navigationController?.popViewControllerAnimated(true)

          一、常規主題色使用點

          應用在發布前都會對其主題色進行設置,以統一應用的風格(可能有多套主題)。在主題色設置上有幾個方面,如下:

          1.TabBar部分,設置圖片高亮、文本高度顏色

          2.NavigationBar部分,設置導航欄顏色及字體顏色

          3.應用標簽等,設置字體的顏色

          4.應用圖片主題色

          主題色的設置點,大體從上面四個方面著手,圖片的主題色我們可通過圖片更換的方式進行處理。而通過代碼來處理的1-3條,有著不同的處理方法。大家常規處理方法如下:

          步驟一:變化分離

          1.利用Swift擴展語法擴展UIColor,將應用主題色在擴展中統一處理(適合單一主題色)

          2.將主題色的配置寫入文件中,由相應邏輯進行解析。此方法將主題色邏輯封裝成主題色管理類(適合多套主題)

          步驟二:離散使用上步封裝的類

          1.在任何使用主題色的地方,使用擴展中的UIColor方法來設置,一般包括背景色,文字顏色等

          這里給出UIColor的擴展

          1extension UIColor {23//主題色4classfunc applicationMainColor() ->UIColor {5returnUIColor(red:238/255, green:64/255, blue:86/255, alpha:1)6}78//第二主題色9classfunc applicationSecondColor() ->UIColor {10returnUIColor.lightGrayColor()11}1213//警告顏色14classfunc applicationWarningColor() ->UIColor {15returnUIColor(red:0.1, green:1, blue:0, alpha:1)16}1718//鏈接顏色19classfunc applicationLinkColor() ->UIColor {20returnUIColor(red:59/255, green:89/255, blue:152/255, alpha:1)21}2223}

          二、TabBar主題色設置

          很多應用中,默認情況下都使用了TabBar控件,但是TabBar主題色等設置根據使用情況的不同,設置起來也不一樣。代碼創建比較靈活,更改主題色比較容易。而使用了Xib/Storyboard也是有辦法做統一處理的,如下,迭代更改TabBar默認字體顏色

          1func configTabBar() {2let items =self.tabBar.items3foriteminitemsas[UITabBarItem] {4let dic = NSDictionary(object: UIColor.applicationMainColor(),5forKey: NSForegroundColorAttributeName)6item.setTitleTextAttributes(dic,7forState: UIControlState.Selected)8}9}

          設置TabBar圖片及文字默認選中顏色

          self.tabBar.selectedImageTintColor = UIColor.applicationMainColor()

          Tips注意事項

          Changing this property’s value provides visual feedback in the user interface, including the running of any associated animations. The selected item displays the tab bar item’s selectedImage image, using the tab bar’s selectedImageTintColor value. To prevent system coloring of an item, provide images using the UIImageRenderingModeAlwaysOriginal rendering mode.

          在一些情況,正常狀態為白色圖片時,真機測試時,白色圖片會出現偏色(顯示結果為灰色),這是因為系統默認著色導致的,在創建UITabBarItem時,可通過使用UIImageRenderingModeAlwaysOriginal避免。示例代碼如下:

          1let imageNormal = UIImage(contentsOfFile:"imageNormal")?.2imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)3let imageSelected = UIImage(contentsOfFile:"imageSelected")4let tabBarItem = UITabBarItem(title:"title",5image: imageNormal,6selectedImage: imageSelected)

          三、一勞永逸,利用Hook原理通設NavigationBar顏色

          iOS應用中,NavigationBar十分常用,它的使用主要包括以下兩個場景

          1.代碼直接構建

          2.Xib/Storyboard構建

          如果是純代碼構建的時候,比較簡單,直接使用UIColor的擴展來設置顏色。實際項目中,有些界面是通過Xib/Storyboard來創建的,有些是代碼寫的,但這也難不到大家,使用繼承。創建一個繼承自UINavigationController的子類,通過這個子類來統一設置主題色。然后告訴項目中的所有人,強制使用UINavigationController子類,包括Xib/Storyboard等。問題是舊項目怎么辦,這種強制要求可以工作,有沒有一個更好的辦法,讓所有人正常使用UINavigationController,而在神不知鬼不覺的情況下,通設所有NavigationBar呢? 先上代碼,再解釋

          1.創建一個UIViewController的擴展

          1extension UIViewController {2func viewDidLoadForChangeTitleColor() {3self.viewDidLoadForChangeTitleColor()4ifself.isKindOfClass(UINavigationController.classForCoder()) {5self.changeNavigationBarTextColor(selfasUINavigationController)6}7}89func changeNavigationBarTextColor(navController: UINavigationController) {10let nav = navControllerasUINavigationController11let dic = NSDictionary(object: UIColor.applicationMainColor(),12forKey:NSForegroundColorAttributeName)13nav.navigationBar.titleTextAttributes =dic14nav.navigationBar.barTintColor =UIColor.applicationSecondColor()15nav.navigationBar.tintColor =UIColor.applicationMainColor()1617}1819}

          2.編寫用于Hook的工具類

          1func swizzlingMethod(clzz: AnyClass, #oldSelector: Selector, #newSelector: Selector) {2let oldMethod =class_getInstanceMethod(clzz, oldSelector)3let newMethod =class_getInstanceMethod(clzz, newSelector)4method_exchangeImplementations(oldMethod, newMethod)5}

          3.在AppDelegate中調用

          1func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) ->Bool {2swizzlingMethod(UIViewController.self,3oldSelector:"viewDidLoad",4newSelector:"viewDidLoadForChangeTitleColor")5//do others6returntrue7}

          4.原理說明

          在程序入口處,通過運行時機制,動態的替換UIViewController的周期方法viewDidLoad為我們指定的方法viewDidLoadForChangeTitleColor。在viewDidLoadChangeTitleColor中,需要做兩件事:

          調用原來的viewDidLoad方法

          執行修改主題色相關代碼

          1.如何調用原來的viewDidLoad方法

          在AppDelegate中,通過調用方法swizzlingMethod我們將viewDidLoad與viewDidLoadForChangeTitleColor方法體進行了替換,原理如下圖:
          
          從上面的圖可以看出,當在viewDidLoadForChangeTitleColor中執行:
          
          self.viewDidLoadForChangeTitleColor()
          
          是不會造成循環調用,反而是調用了我們期望執行的viewDidLoad方法體。

          四、Xib/Storyboard的處理

          一些在Xib/Storyboard中設置的主題色,比如文本顏色,按鈕的高亮顏色等,該如何處理呢,以UILabel為例,建立擴展

          1extension UILabel {2var colorString: String {3set(newValue) {4switchnewValue {5case"main":6self.textColor =UIColor.applicationMainColor()7case"second":8self.textColor =UIColor.applicationSecondColor()9case"warning":10self.textColor =UIColor.applicationWarningColor()11default:12self.textColor =UIColor.applicationSecondColor()13}14}15get{16returnself.colorString17}18}19}

          在Xib/Storyboard的查檢器中進行編輯,如下圖:

          4.總結

          1.只有一套主題時,上面的方法可以直接復制使用,在更換主題時,只需要更換相應圖片及修改UIColor的擴展類
          
          2.在有多套主題,用戶可以自由切換主題時,可以按文章中的Hook機制,對viewWillAppear進行劫持,也可以輕松實現主題的改變
          
          4}56func cacheGetString(key: String) ->String{7var userInfo =NSUserDefaults()8var tmpSign =userInfo.stringForKey(key)9returntmpSign!10}

          經典錯誤

          一:可選類型錯誤

          tipBtn.setTitle("添加表情:\(self.textField?.text)", forState: UIControlState.Normal)

          解決辦法

          tipBtn.setTitle("添加表情:\(self.textField!.text)", forState: UIControlState.Normal)

          二:可選鏈

          提示插入

          插入子后??提示刪除

          這個時候只需使用顯示就可以。

          以上就是小編為大家分享的IOS Swift實戰開發經驗,希望對大家有所幫助。

          預約申請免費試聽課

          怕錢不夠?就業掙錢后再付學費!    怕學不會?從入學起,達內定制課程!     擔心就業?達內多家實踐企業供你挑選!

          上一篇:IOS開發中的5種圖片縮略技術教程
          下一篇:企業應該如何制定網絡營銷推廣方案?

          高薪運維工程師都具備哪些特性?

          大學畢業生參加嵌入式培訓班好就業嗎?

          新人如何選擇嵌入式培訓機構?

          學習沒進步、工作沒方法,你也這樣嗎?

          • 掃碼領取資料

            回復關鍵字:視頻資料

            免費領取 達內課程視頻學習資料

          • 視頻學習QQ群

            添加QQ群:1143617948

            免費領取達內課程視頻學習資料

          Copyright ? 2018 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

          選擇城市和中心
          江西省

          貴州省

          廣西省

          海南省

          香蕉视频在线一级a做爰片免费观看视频 欧美成年性色生活片 百度 好搜 搜狗
          <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>