IOS開發小技巧
如何檢測應用更新?
你可以使用友盟等第三方工具,但如果你只想使用輕量級的方法,只需GET這個介面:http://itunes.apple.com/lookup?id=你的應用程式的ID
,解析返回的json字串就行。
我想完全複製一個 UIView 怎麼辦,copy 方法好像用不了
iOS 中並不是所有物件都支援copy,只有遵守NSCopying協議的類才可以傳送copy訊息,當用你試圖使用類似於UIView
*v = [_v1 copy]
方式複製一個UIView時,會丟擲一個名為Terminating
app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView copyWithZone:]: unrecognized selector sent to instance 0x7ff163d12060'
1 2 |
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:_v1]; UIView *v = [NSKeyedUnarchiver unarchiveObjectWithData:data]; |
如何檢測音訊藍芽是否連線
有個小技巧,檢測一下當前音訊外設是否為 BluetoothA2DPOutput 即可。
1 2 3 4 |
AVAudioSessionPortDescription *pd = [[AVAudioSession sharedInstance].currentRoute |
返回高度固定的 tableviewcell (高效能版)
一般我們用來指定 tableviewcell 的高度時使用 - (CGFloat)tableView:(UITableView
*)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
方法返回一個固定的高度。但這個方法會被 n 多次呼叫,其實你只要這麼指定下高度就可以 self.tableView.rowHeight
= 100
我只是想修改導航欄返回按鈕的文字,其他啥都不想幹
你可以嘗試在 viewWillDisappear
方法裡這麼幹:
專案中靜態庫有真機和模擬器兩個版本,可不可以合併為一個
在 Xcode 中建立一個靜態庫檔案,編譯後會生成兩個版本,一個是模擬器版本,一個是真機版本。所以導致後續引入靜態庫非常不方便,因此很有必要把這兩個庫打包成一個。合併以後的靜態庫檔案大小是未合併的兩個靜態庫之和。方法如下:
bash
1
|
lipo -create "path/to/模擬器專用lib.a" "path/to/真機專用lib.a" -output "path/to/通用lib.a"
|
我需要一個完全透明的導航欄
So easy.
1 2 3 |
/// *** 這兩段程式碼可以把導航欄變透明 UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) UINavigationBar.appearance().shadowImage = UIImage() /// 這個是去除導航欄底部的黑色線條 |
直接使用 16 進位制顏色
使用 16 進位制顏色相對麻煩一點,在 objc 中你可以定義這樣的巨集。在 swift 中建議將它改寫成 UIColor 的擴充套件方法
1
|
#define UIColorHEX(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
|
tableviewcell 預設的高亮太醜,如何自定義
1 2 3 4 5 |
cell?.selectedBackgroundView = { let view = UIView(frame: cell!.contentView.bounds) view.backgroundColor = UIColor(white: 0.2, alpha: 0.2) return view }() |
我想讓 tableviewcell 的 separator 往左靠近邊框,但又不想重寫它怎麼辦
從 iOS 7 開始 tableviewcell 的 separator 遍右移了 27 個畫素左右,下面的 3 行程式碼可以完美解決這個問題。
1 2 3 |
cell?.separatorInset = UIEdgeInsetsZero cell?.layoutMargins = UIEdgeInsetsZero cell?.preservesSuperviewLayoutMargins = false |
如何清空其他應用程式在遠端控制介面留下的媒體資訊
1
|
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
|
push/pop 導航欄時有黑影
應該來說這是 iOS 7 中遺留的一個 bug,直到 8.3 釋出也沒解決。自己的程式中要修復這個問題也很簡單,設定一下試圖控制器的背景色就可以。
移除導航欄返回按鈕的title
1
|
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -100) forBarMetrics:UIBarMetricsDefault];
|
移除subviews
移除 subviews 的常用方法就是遍歷 view 中得所有檢視依次刪除:
1 2 3 |
for (UIView *items in view.subviews) { [items removeFromSuperview]; } |
其實還有一個方法也能快速刪除 subviews 而且比 for 迴圈好看的多:
objc
1
|
[view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
|
不過這個方法只存在於 objc 中。
Build 版本號自動加1
iOS專案開發中有時需要將 build 次數記錄下來,在專案的TARGETS
->Genneral
中修改相應的
Build 選項即可,但是如果在Build Phases
中的Run
Script
中新建這樣一個指令碼就可以在每次 build 時自動把 build 次數加1:
1 2 3 4 |
#!/bin/bash buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE") buildNumber=$(($buildNumber + 1)) /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE" |