- 利用快捷鍵快速創(chuàng)建文件
/*
command + j -> 定位到目錄結(jié)構(gòu)
????鍵選擇文件夾
按回車 -> command + c 拷貝文件名稱
command + n 創(chuàng)建文件
*/
// 設(shè)置當(dāng)前控制器對(duì)應(yīng)tabBar的顏色
// 注意: 在iOS7以前如果設(shè)置了tintColor只有文字會(huì)變, 而圖片不會(huì)變
tabBar.tintColor = UIColor.orangeColor()
- 修改命名空間地址
默認(rèn)情況下,命名空間就是項(xiàng)目的名稱,但是命名空間是可以修改的
打印Swift對(duì)象有命名空間限制
- Swift動(dòng)態(tài)命名空間地址
- Swift動(dòng)態(tài)獲取命名空間
// 1.動(dòng)態(tài)獲取命名空間
let ns = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String
/**
初始化子控制器
- parameter childController: 需要初始化的子控制器
- parameter imageName: 子控制器的圖片名稱
- parameter title: 子控制器的標(biāo)題
*/
private func addChildViewController(childControllerName: String, imageName : String, title:String) {
// 1.動(dòng)態(tài)獲取命名空間
let ns = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String
// 2.將字符串轉(zhuǎn)換為類
// 默認(rèn)情況下,命名空間就是項(xiàng)目的名稱,但是命名空間是可以修改的
let cls:AnyClass? = NSClassFromString(ns + "." + childControllerName)!
// 3.通過(guò)類創(chuàng)建對(duì)象
// 3.1將AnyClass轉(zhuǎn)換為指定的類型
let vcCls = cls as! UIViewController.Type
// 3.2通過(guò)class創(chuàng)建對(duì)象
let vc = vcCls.init()
// 1.1設(shè)置首頁(yè)對(duì)應(yīng)的數(shù)據(jù)
vc.tabBarItem.image = UIImage(named: imageName)
vc.tabBarItem.selectedImage = UIImage(named: imageName + "_highlighted")
vc.title = title
// 1.2.給首頁(yè)包裝一個(gè)導(dǎo)航控制器
let nav = UINavigationController()
nav.addChildViewController(vc)
// 3.將導(dǎo)航控制器添加到當(dāng)前控制器
addChildViewController(nav)
}
try : 發(fā)生異常會(huì)跳到catch中繼續(xù)執(zhí)行
try! : 發(fā)生異常程序直接崩潰
在Swift中, 如果需要遍歷一個(gè)數(shù)組, 必須明確數(shù)據(jù)的類型
從字典里面取值榜聂,可以有值,可以為nil,所以返回值是可選類型
如何加載json數(shù)據(jù)
// 1.獲取json文件的路徑
let path = NSBundle.mainBundle().pathForResource("MainVCSettings.json", ofType: nil)
// 2.通過(guò)文件路徑創(chuàng)建NSData
if let jsonPath = path {
let jsonData = NSData(contentsOfFile: jsonPath)
do {
// 有可能發(fā)生異常的代碼放到這里
// 3.序列化json數(shù)據(jù) --> Array
// try : 發(fā)生異常會(huì)跳到catch中繼續(xù)執(zhí)行
// try! : 發(fā)生異常程序直接崩潰
let dictArr = try NSJSONSerialization.JSONObjectWithData(jsonData!, options: NSJSONReadingOptions.MutableContainers)
// 4.遍歷數(shù)組,動(dòng)態(tài)創(chuàng)建控制器
// 在Swift中, 如果需要遍歷一個(gè)數(shù)組, 必須明確數(shù)據(jù)的類型
for dict in dictArr as! [[String : String]]
{
// 報(bào)錯(cuò)的原因是因?yàn)閍ddChildViewController參數(shù)必須有值, 但是字典的返回值是可選類型
addChildViewController(dict["vcName"]!, imageName: dict["imageName"]!, title: dict["title"]!)
}
} catch {
print(error)
// 從本地創(chuàng)建控制器
// 1.創(chuàng)建首頁(yè)
addChildViewController("HomeTableViewController", imageName: "tabbar_home", title: "首頁(yè)")
// 1.創(chuàng)建消息
addChildViewController("MessageTableViewController", imageName: "tabbar_message_center", title: "消息")
// 1.創(chuàng)建發(fā)現(xiàn)
addChildViewController("DiscoverTableViewController", imageName: "tabbar_discover", title: "發(fā)現(xiàn)")
// 1.創(chuàng)建我
addChildViewController("ProfileTableViewController", imageName: "tabbar_profile", title: "我")
}
}
- 從iOS7開始就不推薦大家在viewDidLoad中設(shè)置frame
- 注意: 監(jiān)聽按鈕點(diǎn)擊的方法不能是私有方法
/**
監(jiān)聽加號(hào)按鈕點(diǎn)擊
注意: 監(jiān)聽按鈕點(diǎn)擊的方法不能是私有方法
按鈕點(diǎn)擊事件的調(diào)用是由 運(yùn)行循環(huán) 監(jiān)聽并且以消息機(jī)制傳遞的,因此,按鈕監(jiān)聽函數(shù)不能設(shè)置為 private
*/
func composeBtnClick(){
print(__FUNCTION__)
}