IOS開發(fā)

  • 重置密碼
    http://sc.chinaz.com/info/140328474587.htm

  • CocoaPods第三方庫管理
    http://www.360doc.com/content/14/0309/10/11029609_358970353.shtml

  • 布局庫
    https://github.com/SnapKit/Masonry

  • 循環(huán)引用,無法釋放
    self ws

  • 獲取設(shè)備id
    https://github.com/ylechelle/OpenUDID

  • 用pod添加一個第三方庫的步驟
    庫的地址:https://github.com/ylechelle/OpenUDID
    終端里輸入命令
    用pod搜索测萎,若能搜到就能用pod管理:pod search OpenUDID
    cd到項目的根目錄
    pod install --verbose --no-repo-update

  • 使用linq的庫
    LinqToObjectiveC

  • dictionary轉(zhuǎn)class的庫
    Mantle

  • copy和strong的區(qū)別
    @property (nonatomic, strong)
    @property (nonatomic, copy)

  • ios證書
    鑰匙串->證書->導(dǎo)出
    .p12文件

  • ios中view自適應(yīng)鍵盤的出現(xiàn),不會出現(xiàn)鍵盤擋住輸入框的情況
    加入第三方庫IQKeyboardManager
    pod 'IQKeyboardManager', '~> 3.2.0.3'

  • tableViewCell的自定義
    一般一個頁面里就一個tableView,因為多個tableView并不是一起滑動操作的
    一個tableView里分多個塊(section)

  • app程序啟動上面都有黑底邊
    可以設(shè)置一下app的launch image忌傻,如果實在不需要驶悟,那就設(shè)置成全黑圖片

  • mac上的svn版本管理工具
    cornerstone

  • 證書配置
    新環(huán)境開始時蕾盯,需要用真機(jī)測試
    apple developer后臺添加了真機(jī)uid后
    本地增加.p12證書寥闪,xcode選擇team带膀,developer后臺下載Provisioning Profiles文件
    本地雙擊了對應(yīng)的.mobileprovision文件后,項目的Build Settings橙垢,Code Signing Identity中要選擇一下

  • 收起軟鍵盤
    textView輸入時,自動彈出的軟鍵盤伦糯,想要點擊其他地方就可以收起軟鍵盤
    收起軟鍵盤的方法有:textView resignFirstResponder

  • 截獲點擊事件的方法有:
    // 聲明點擊事件 UITapGestureRecognizer* tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(Actiondo:)]; [self.view addGestureRecognizer:tapGesture]; // 自定義點擊處理 -(void)Actiondo:(id)sender { // 注銷當(dāng)前view(或它下屬的text fields)的first responder狀態(tài) [self.view endEditing:YES]; }

  • 素材圖片的扣取
    打開對應(yīng)界面的psd柜某,如果寬度640,扣出來的原大小素材圖片就是2x大小敛纲,再縮小一倍大小就是1x
    找到對應(yīng)素材位置的圖層(要選中那個圖層喂击,一般可以通過切換對應(yīng)圖層前面的眼睛圖標(biāo)來回切換是否顯示圖層來確定是否選擇中缺),用選擇工具框中淤翔,復(fù)制到另一個新地方(ctrl+N)
    在新的地方翰绊,選擇 圖像->裁剪,選擇透明像素旁壮,就可以去除多余的地方
    保存為web用格式

  • NSDictionary初始化
    鍵值不可以為整數(shù)监嗜,可以轉(zhuǎn)換成NSNumber

  • ios多線程
    搜gcd

  • 點擊事件帶坐標(biāo)
    普通的addTarget,對應(yīng)的action方法抡谐,參數(shù)是 (id)sender
    換成
    UITapGestureRecognizer* tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(Actiondo:)]; [self.btn addGestureRecognizer:tapGesture]; //給自己的btn增加了一個新類型的點擊處理事件 -(void)Actiondo:(UITapGestureRecognizer *)sender { CGPoint = [sender locationInView:self.view]; }

  • 手機(jī)端調(diào)用的api版本
    服務(wù)端api裁奇,地址中可以帶上版本號,以同時滿足各版本的請求
    例如:http://www.xxx.com/api/myproject/version7/gettopics.php

  • 綁定的數(shù)據(jù)刷新
    例如TableView麦撵、CollectionView等刽肠,可以通過reloadData來刷新數(shù)據(jù)

  • 顯示png出現(xiàn)不透明,例如黃邊的問題
    UIImageView設(shè)置背景色backgroundColor=[UIColor clearColor]

  • UICollectionView橫向cell間距免胃,會出現(xiàn)多10
    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; [layout setSectionInset:UIEdgeInsetsMake(0,0,0,0)]; [layout setScrollDirection:UICollectionViewScrollDirectionHorizontal]; [layout setMinimumInteritemSpacing:3]; // 橫向間距 [layout setMinimumLineSpacing:0]; // 只是單行橫向也要設(shè)置 [layout setItemSize:CGSizeMake(30,30)]; self.collectionView = [[UICollectionVIew alloc] initWithFrame:CGRectMake(0,0,320,40) collectionViewLayout:layout];

  • 獲取tableView的偏移量
    self.tableView.contentOffset

  • 單擊事件后獲取sender
    [self.btn addTarget:self action:@selector(actionClick:) forControlEvents:UIControlEventTouchUpInside]; -(void)actionClick:(id)sender { UIButton *btn = (UIButton*)sender; }

  • 調(diào)試看值
    可以鼠標(biāo)停在變量上音五,彈出信息
    如果不彈出,可以在下方輸出信息框的 藍(lán)色的(lldb)后羔沙,輸入 po self.array 回車 來打印出self.array的值
    po就是print object的意思

  • 使用gcd多線程獲取數(shù)據(jù)同時更新UI躺涝,但UI刷新不及時
    如果使用的不是主線程來獲取數(shù)據(jù)(例如dispatch_async(dispatch_get_global_queue)),那么寫在一起的用于更新UI的代碼也是在非主線程中的
    所以如果要及時更新UI撬碟,在非主線程的調(diào)用中诞挨,寫一個主線程更新UI(dispatch_async(dispatch_get_main_queue))

  • ControllerView之間發(fā)送通知
    參數(shù):
    NSDictionary* userInfo = @{@"key1":@"val1"};
    發(fā)送:
    [NSNotificationCenter defaultCenter] postNotificationName:@"唯一的通知名" object:nil userInfo:userInfo];
    接收者們:
    [NSNotificationCenter defaultCenter] addObserver:self selector:@selector(MyCallBack:) name:@"唯一的通知名" object:nil]; -(void)MyCallBack:(NSNotification *)notification { NSDictionary *userInfo = notification.userInfo; }

  • 異步網(wǎng)絡(luò)請求處理方式之一
    無參數(shù)時:ASIHTTPRequest
    有參數(shù)時:ASIFormDataRequest

  • 系統(tǒng)自帶的alertView
    UIAlertView *myAlert = [UIAlertView alloc] initWithTitle:@"這里是提示語" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"確定",nil]; [myAlert show]; //實現(xiàn)那個delegate -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { // buttonIndex 對應(yīng)上面的按鈕index:0-取消 1-確定 }

  • cell中使用到了sd_setImage結(jié)果出現(xiàn)了殘影
    問題不在sd_setImage莉撇,而是在cell重用時,沒有先設(shè)置imageView setImage=nil惶傻,然后再用sd_setImage

  • 編輯框棍郎,編輯時的軟鍵盤彈不出來了
    如果是使用的 [textView becomeFirstResponder],來設(shè)置編輯框變成用戶輸入的第一響應(yīng)者银室,來達(dá)成彈出軟鍵盤的效果
    需要注意涂佃,該textView是否在不經(jīng)意間被設(shè)置成了不可編輯狀態(tài)(比如鍵盤類型切換時,文字/表情)蜈敢,使他不能被設(shè)置為響應(yīng)者
    解決辦法是注意在上一次軟鍵盤收起的時候辜荠,設(shè)置textView.editable = YES 還原編輯框的可編輯狀態(tài)

  • UITapGestureRecognizer 與 tableview collectionView等的選中事件沖突時
    重寫UIGestureRecognizerDelegate委托
    可以判斷[touch.view class]
    但是如果這個tableView里面的cell使用了自定義的樣式里面包好了UIView等等的話,就無法通過view的class來判斷了
    可以給self.view這個背景view添加一個tag抓狭,然后判斷touch.view.tag是否是這個tag就可以判斷出來了

  • UIView動畫
    [UIView beginAnimations:nil context:nil]; // 開始動畫 [UIView setAnimationDuration:10.0]; // 動畫時長 CGPoint point = _imageView.center; point.y += 150; // 向下移動 [_imageView setCenter:point]; [UIView commitAnimations]; // 提交動畫

  • cell里使用Masonry布局庫布局伯病,mas_makeConstraints沒有生效或受影響
    可能是cell復(fù)用時,make沒有生效的原因
    解決辦法是改用mas_remakeConstraints

  • 使用Masonry布局后否过,使用UIView animation來做動畫午笛,發(fā)現(xiàn)動畫不自然(控件從四周聚集起來的樣子),或沒有生效
    因為autolayout和動畫有沖突苗桂,需要我們手動的立即刷新一下控件的位置(在動畫前药磺,在動畫結(jié)束后,各刷新一下)
    WS(ws); // 起始位置 [self.backVIew mas_remakeConstraints:^(MASConstraintMaker *make){ make.top.equalTo(ws.mas_bottom).with.offset(0); make.left.equalTo(ws.mas_left).with.offset(0); make.right.equalTo(ws.mas_right).with.offset(0); }]; // 動畫前立即刷新一下 [self.backView setNeedsLayout]; [self.backView layoutIfNeeded]; // 動畫 [UIView animateWithDuration:0.5f animations:^{ [self.backView mas_updateConstraints:^(MASConstraintMaker *make){ make.top.equalTo(ws.mas_bottom).with.offset(-300); // 注意這里只能對在起始位置設(shè)置過的屬性進(jìn)行修改 }]; // 動畫后立即刷新一下 [self.backView setNeedsLayout]; [self.backView layoutIfNeeded]; }];

  • 隱藏頂部欄StatusBar
    一般使用 [[UIApplication sharedApplication] setStatusBarHidden:YES]; 即可
    還一種方法煤伟,是修改當(dāng)前window的級別 self.window.windowLevel = UIWindowLevelStatusBar;
    LevelStatusBar要大于LevelNormal癌佩,所以會顯示在上面

  • 服務(wù)端返回json,app解析出來的emoji表情出現(xiàn)了問題
    app解析json便锨,有下面兩種方式
    // 方式1(這種方式解析出來的emoji可能會出現(xiàn)問題) NSData *data = [request responseData]; // (ASIHTTPRequest *)request NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSDictionary *dic = [str JSONValue]; // 方式2(這樣的解析在某些時候可以替代方式1) NSData *data = [request responseData]; NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

  • UIButton同時設(shè)置圖片和文字
    btn setImage
    btn setTitle
    間距:btn setTitleEdgeInsets(文字)

  • UITableView style
    UITableViewStylePlain:
    section header會固定围辙;
    heightForHeaderInSection設(shè)置0有效;
    UITableVIewStyleGrouped:
    section header不會固定放案;
    heightForHeaderInSection設(shè)置0無效酌畜;

  • 獲取app版本號
    NSBundle *bundle = [NSBundle bundleForClass:[self class]]; [bundle objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; // 4.9.2 [bundle objectForInfoDictionaryKey:@"CFBundleVerion"]; // 16

  • cell中的btn點擊后,獲取點擊到的是哪個cell
    -(void)btnClick:(id)sender { CGPoint btnPosition = [sender convertPoint:CGPointZero toView:self.tableView]; NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:btnPosition]; }

  • ios中獲取時間戳
    long nowTime = [[NSDate date] timeIntervalSince1970];

  • app從后臺返回來時執(zhí)行的函數(shù)
    appdelegate中的 -(void)applicationDidBecomeActive:(UIApplication *)application{}

  • 設(shè)置圓角不生效
    UIView.layer.cornerRedius = 12; // 設(shè)置了圓角度數(shù)
    UIView.layer.masksToBounds = YES; // 這里要設(shè)置一下

  • tableview插入新row時的動畫效果
    [itmes addObject:new_row]; // 如果你是用一個items數(shù)組來存放所有row的數(shù)據(jù)的話 [tableView setContentSize:CGSizeMake(tableView.contentSize.width,tableView.contentSize.height+row_height)] // 為新row增加顯示的空間 [tableView beginUpdates]; [tableView insertRowsAtIndexPaths:[NSIndexPath indexPathForRow:0 inSection:0] withRowAnimation:UITableViewRowAnimationNone]; // 插入新row [tableView endUpdates]; [tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:[items count]-1 inSection:0 atScrollPosition:UITableViewScrollPositionNona animated:NO]] // 定位到

  • 單個controller可以注冊監(jiān)聽app從后臺返回來的事件
    [NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myfunc) name:UIApplicationWillEnterForegroundNotification object:nil];

  • 用戶標(biāo)識之一
    \#define IDFA [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]

  • 判斷是否安裝了某應(yīng)用卿叽,是否打開它
    NSURL *appSchemeUrl = [NSURL URLWithString:@"yourapp://"];if ([[UIApplication sharedApplication] canOpenURL:appSchemeUrl]) { [[UIApplication sharedApplication] openURL:appSchemeUrl]; }else{ NSURL *appStoreUrl = [NSURL URLWithString:@"itms-apps://itunes.apple.com/cn/app/yourid"]; if ([[UIApplication sharedApplication] canOpenURL:appStoreUrl]) { [[UIApplication sharedApplication] openURL:appStoreUrl]; } }

  • 單例的使用
    User.h: @interface User:NSObject +(User*)shareInstance; @end User.m: static id _instance; @implementation User +(User*)shareInstance { static dispatch_once_t once; dispatch_once(&once,^{_instance = [[self alloc] init];}); return _instance; } @end 調(diào)用的時候: [User shareInstance];

  • [NSUserDefaults standarUserDefaults] setObject setValue不能放long之類的數(shù)值
    用[NSNumber numberWithLong]之類的桥胞,用NSNumber包裝一下

  • NSString 轉(zhuǎn)成 int,0的轉(zhuǎn)換會有問題
    [@"0" intValue] = nil

  • 監(jiān)控手勢操作
    UISwipeGestureRecognizer *recognizer = [UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)]; recognizer.direction = UISwipeGestureRecognizerDirectionRight; [self.view addGestureRecognizer:recognizer]; -(void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer{ if(recognizer.direction == UISwipeGestureRecognizerDirectionRight) { [self back]; // 這個例子是右滑手勢的返回功能 } } -(void)back{ [self.nacigationController popViewControllerAnimated:YES]; }

  • 自定義Framework
    可打出模擬器專用framework考婴,真機(jī)專用framework
    要打出通用性的framework贩虾,需要合并兩個framework
    可以在自定義framework項目中,添加Run Script沥阱,每次Run時執(zhí)行一個腳本來自動生成
    if [ "${ACTION}" = "build" ]thenINSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.frameworkDEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.frameworkSIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.frameworkif [ -d "${INSTALL_DIR}" ]thenrm -rf "${INSTALL_DIR}"fimkdir -p "${INSTALL_DIR}"cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"#ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"#open "${DEVICE_DIR}"#open "${SRCROOT}/Products"fi

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缎罢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌策精,老刑警劉巖舰始,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異咽袜,居然都是意外死亡丸卷,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進(jìn)店門询刹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谜嫉,“玉大人,你說我怎么就攤上這事凹联°謇迹” “怎么了?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵蔽挠,是天一觀的道長住闯。 經(jīng)常有香客問我,道長澳淑,這世上最難降的妖魔是什么寞秃? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮偶惠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘朗涩。我一直安慰自己忽孽,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布谢床。 她就那樣靜靜地躺著兄一,像睡著了一般。 火紅的嫁衣襯著肌膚如雪识腿。 梳的紋絲不亂的頭發(fā)上出革,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天,我揣著相機(jī)與錄音渡讼,去河邊找鬼骂束。 笑死,一個胖子當(dāng)著我的面吹牛成箫,可吹牛的內(nèi)容都是我干的展箱。 我是一名探鬼主播,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼蹬昌,長吁一口氣:“原來是場噩夢啊……” “哼混驰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤栖榨,失蹤者是張志新(化名)和其女友劉穎昆汹,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體婴栽,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡满粗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了居夹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片败潦。...
    茶點故事閱讀 40,973評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖准脂,靈堂內(nèi)的尸體忽然破棺而出劫扒,到底是詐尸還是另有隱情,我是刑警寧澤狸膏,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布沟饥,位于F島的核電站,受9級特大地震影響湾戳,放射性物質(zhì)發(fā)生泄漏贤旷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一砾脑、第九天 我趴在偏房一處隱蔽的房頂上張望幼驶。 院中可真熱鬧,春花似錦韧衣、人聲如沸盅藻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽氏淑。三九已至,卻和暖如春硕噩,著一層夾襖步出監(jiān)牢的瞬間假残,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工炉擅, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留辉懒,地道東北人。 一個月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓谍失,卻偏偏與公主長得像耗帕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子袱贮,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,982評論 2 361

推薦閱讀更多精彩內(nèi)容