(iOS)項目總結(jié)-項目中遇到的各種的問題和解決方法

? 前言:? ? ?

?一到公司報道那時,便著手獨立的去完成了一個項目勉痴,其中的辛酸淚也是不足為外人道也赫模。這次算是一個新型的app,仍然是獨立開發(fā)蚀腿,但心境和想法卻是完全的不同嘴瓤。下面說一次以前做開發(fā)時常常忽略的知識,也算是一種復(fù)習(xí)了吧莉钙。下面言歸正傳:


1廓脆、自帶鍵盤的next用法

這算是比較常用的了吧,只要我們想到登錄和注冊界面磁玉,就應(yīng)該自然而然的想到 - 鍵盤的next用法(當(dāng)然不排除相當(dāng)多的軟件并沒有實現(xiàn)這個功能)停忿。

想法也就是:用戶在輸入用戶名后,點擊next跳轉(zhuǎn)到下一個輸入框蚊伞。其實也不用想的如此復(fù)雜席赂,在登錄界面,我們完全可以用一個 if 語句做判斷时迫,去實現(xiàn)鍵盤的響應(yīng)和注銷響應(yīng)颅停。

代碼如下:?

?? - (BOOL)textFieldShouldReturn:(UITextField *)textField? ? {?

?? ? UITextField *passTextFiled = (UITextField *)[self.view viewWithTag:201];? ?

?? if (textField.tag == 200) {? ??

? ? ? [passTextFiled becomeFirstResponder];? ?

?? ? }else{? ? ?

? ? ? [passTextFiled resignFirstResponder];??

? ? }? ?

?? return YES;?

?? }

這樣就簡單的在變成響應(yīng)和注銷響應(yīng)之間實現(xiàn)了輸入框的切換。

但還是存在一個問題掠拳,如果我實現(xiàn)注冊界面的跳轉(zhuǎn)輸入框癞揉,并且在輸入框很多的情況下,顯然如果我仍是這樣判斷,會顯得啰嗦和冗余喊熟。

我曾想過使用計數(shù)的方式柏肪,記錄每一次的點擊next后的tag,但實踐中失敗了芥牌,因為當(dāng)我不通過next而是直接用手去觸摸選擇輸入框時烦味,則無法計數(shù)。

?這里先留個空白壁拉,等把手里的項目完成時再研究這個問題


2谬俄、UITextField的糾錯和首字母大小寫問題

這個問題只是簡單的屬性問題,在開發(fā)時如果忘記扇商,建議多點進去看看凤瘦,(如:command + UITextField)? ?

?//輸入框中是否有個叉號,在什么時候顯示案铺,用于一次性刪除輸入框中的內(nèi)容? ? self.clearButtonMode = UITextFieldViewModeWhileEditing;? ??

//是否糾錯,本人感覺糾錯是一個很反感的東西蔬芥,但UITextField默認(rèn)是 YES,這里我改成了NO? ? ? self.autocorrectionType = UITextAutocorrectionTypeNo;? ? ? ?

?//再次編輯就清空? ? ? self.clearsOnBeginEditing = YES;? ? ? ?

?//設(shè)置自動縮小顯示的最小字體大小? ? ? self.minimumFontSize = 15;? ? ? ??

//設(shè)置鍵盤的樣式,本人感覺這個設(shè)置對用戶體驗有影響控汉。比如說我想打電話笔诵,Type為UIKeyboardTypeNumberPad,而不是其他 ? ??

?self.keyboardType = UIKeyboardTypeNamePhonePad;


3、iOS中圖片的幾種拉伸方法的使用

以下是apple給出的3種方法: ? ??

?? UIImage *image = [UIImage imageNamed:@"picture"];? ? ? ??

?//iOS5之前? ? ?

?// 左端蓋寬度? ? ? ??

NSInteger leftCapWidth = image.size.width * 0.5f;? ? ? ?

?NSInteger topCapHeight = image.size.height * 0.8f;? ? ? ??

image = [image stretchableImageWithLeftCapWidth:leftCapWidth topCapHeight:topCapHeight];? ? ? ??

//iOS5之后? ? ? ?

?UIEdgeInsets insets = UIEdgeInsetsMake(image.size.height * 0.8f,image.size.width * 0.5f, 40, 40);? ? ? ?

?image = [image resizableImageWithCapInsets:insets];? ? ??

?//iOS6之后? ? ? ? UIEdgeInsets insets = UIEdgeInsetsMake(image.size.height * 0.8f,image.size.width * 0.5f, 40, 40);? ? ? ?

?image = [image resizableImageWithCapInsets:insets resizingMode:UIImageResizingModeStretch];? ??

下面是使用的解釋: ??

/**? ?

?*? - (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight;? ??

?*??

? *? leftCapWidth代表左端蓋寬度姑子,topCapHeight代表頂端蓋高度乎婿。系統(tǒng)會自動計算出右端蓋寬度(rightCapWidth)和底端蓋高度(bottomCapHeight)? ??

?* 算法如下:? ??

?* width為圖片寬度? rightCapWidth = width - leftCapWidth - 1;? ? ? ?

?* height為圖片高度 bottomCapHeight = height - topCapHeight - 1? ??

?*? ??

?*經(jīng)過計算,你會發(fā)現(xiàn)中間的可拉伸區(qū)域只有1x1? ??

?* ??

* stretchWidth為中間可拉伸區(qū)域的寬度? ? ? ? stretchWidth = width - leftCapWidth - rightCapWidth = 1;? ? ? ?

?* stretchHeight為中間可拉伸區(qū)域的高度? ? ? ? stretchHeight = height - topCapHeight - bottomCapHeight = 1;? ??

?*? ??

?*因此街佑,使用這個方法只會拉伸圖片中間1x1的區(qū)域谢翎,并不會影響到邊緣和角落。? ??

?*/

/**? ?

?* - (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets? ??

*? 這個方法只接收一個UIEdgeInsets類型的參數(shù)沐旨,可以通過設(shè)置UIEdgeInsets的left森逮、right、top磁携、bottom來分別指定左端蓋寬度褒侧、右端蓋寬度、頂端蓋高度谊迄、底端蓋高度? ??

?*?*/ ? ? ??

?/**? ??

?*? - (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode? ??

對比iOS5.0中的方法闷供,只多了一個UIImageResizingMode參數(shù),用來指定拉伸的模式: ? ? ? UIImageResizingModeStretch:拉伸模式统诺,通過拉伸UIEdgeInsets指定的矩形區(qū)域來填充圖片? ? UIImageResizingModeTile:平鋪模式歪脏,通過重復(fù)顯示UIEdgeInsets指定的矩形區(qū)域來填充圖片? ??

?**/

圖片拉伸的以上內(nèi)容參考文章 《iOS圖片拉伸技巧》講的很好,建議大家多看看粮呢。


4唾糯、iOS中喚起自帶瀏覽器(safari)的方法

也是一個簡單的一句代碼 怠硼,這種也就是知道了就知道了,不知道就是抓耳撓腮吧?

?? NSURL *url = [NSURL URLWithString:urlStr];? ? [[UIApplication sharedApplication] openURL:url];


5移怯、iOS中喚起電話界面

app內(nèi)部喚起電話界面的實現(xiàn),是找了很多資料才有的一個結(jié)論(安全这难,并且撥打完之后可以返回app)

實現(xiàn)的方法是使用UIWebView 加載電話舟误,目前這種方法是合法的柄驻,App Store也允許通過的盆繁。??

?NSURL *phoneURL = [NSURL URLWithString:[NSString stringWithFormat:@"tel:%@",newPhoneString]]; ? ??

?if (_phoneCallWebView) {?

?? ? ? ? ? ? ? [_phoneCallWebView loadRequest:[NSURLRequest requestWithURL:phoneURL]];??

?}

但如果使用下面的這種方法梁肿,則可能不允許通過審核? ? [

[UIApplication sharedApplication] openURL:phoneURL];


6富岳、iOS 調(diào)用地圖的方法

app內(nèi)部調(diào)用第三方app练慕,這里有一個詳細(xì)的文章《 IOS實現(xiàn)應(yīng)用內(nèi)打開第三方地圖app進行導(dǎo)航》

- app內(nèi)部調(diào)用地圖脏毯,需要先檢測用戶手機上是否已經(jīng)安裝地圖app滴某。

我們常用的地圖app有:高德乡翅、百度剪个;國外有:谷歌(Google Map )秧骑。當(dāng)然還有蘋果自帶的地圖,隨著iOS10的發(fā)布扣囊,蘋果地圖這塊也有很大的完善和進步乎折。

我使用Xcode模擬器實現(xiàn)時,會提示:

?1侵歇、-canOpenURL: failed for URL: "iosamap://" - error: "(null)" 骂澄。原因是:模擬器上沒有高德地圖。?

2惕虑、-canOpenURL: failed for URL: "comgooglemaps://" - error: "This app is not allowed to query for scheme comgooglemaps"坟冲。 原因是:LSApplicationQueriesSchemes 我自己馬虎設(shè)成了字典類型。

首先說好的是iOS9以后溃蔫,我們在app內(nèi)部要跳轉(zhuǎn)到其他軟件時健提,需要在 Info.plist 中添加白名單酒唉。

方法為:在Info.plist中添加 key :LSApplicationQueriesSchemes? 類型為:Array矩桂。

將高德、百度痪伦、谷歌的值填進去分別是:**iosamap**|**baidumap**|**comgooglemaps**

圖片:


?至于下面代碼中的URLScheme 和appName??

是在Info.plist 的URL types中添加? URL Scheme( URL Schemes 是一個數(shù)組,允許應(yīng)用定義多個 URL schemes网沾。 )? 和? URL identifier(建議采用反轉(zhuǎn)域名的方法保證該名字的唯一性攒射,比如 com.yourApp.www)

圖片如下:


?下面是具體的代碼:

?__block NSString *urlScheme = urlScheme;? ?

?__block NSString *appName = appName;? ??

__block CLLocationCoordinate2D coordinate = self.coordinate;? ? ? ??

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"選擇地圖" message:nil preferredStyle:UIAlertControllerStyleActionSheet];? ? ? ? ??

//apple自帶的地圖不需要判斷? ? ? ??

UIAlertAction *action = [UIAlertAction actionWithTitle:@"蘋果地圖" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {? ? ??

? ? ? ? ? ?MKMapItem *currentLocation = [MKMapItem mapItemForCurrentLocation];?

?? ? ? ? ? MKMapItem *toLocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:coordinate addressDictionary:nil]];? ? ? ? ? ? ? ? ? ? ??

?[MKMapItem openMapsWithItems:@[currentLocation, toLocation]? ? ? ? ? ? ? ? ? ? ? ? ? launchOptions:@{

MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving,MKLaunchOptionsShowsTrafficKey: [NSNumber numberWithBool:YES]}];? ? ? ??

}];? ? ? ??

?[alert addAction:action];? ? ? ??

?//判斷百度地圖? ?

?if ( [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://"]])? ? ??

{? ? ? ? UIAlertAction *action = [UIAlertAction actionWithTitle:@"百度地圖" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {? ? ? ? ? ? ? ? ? ? ? ?

?NSString *urlString = [[NSString stringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%f,%f|name=目的地&mode=driving&coord_type=gcj02",coordinate.latitude, coordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

? [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];? ? ? ? ?

?}];? ? ? ??

[alert addAction:action];? ? ??

}? ? ?

?//判斷高德地圖? ? ?

?if ( [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"iosamap://"]])? ? ??

?{? ? ? ??

UIAlertAction *action = [UIAlertAction actionWithTitle:@"高德地圖" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {? ? ? ? ? ? ? ? ? ? ? ??

NSString *urlString = [[NSString stringWithFormat:@"iosamap://navi?sourceApplication=%@&backScheme=%@&lat=%f&lon=%f&dev=0&style=2",appName,urlScheme,coordinate.latitude, coordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];??

? ? ? ? [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];? ? ? ? ? ? ? ? ? ? }];? ? ? ?

?[alert addAction:action];? ??

}? ? ? ??

?//判斷谷歌地圖? ?

?if ( [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"comgooglemaps://"]])? ? {? ? ? ?

?UIAlertAction *action = [UIAlertAction actionWithTitle:@"谷歌地圖" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {? ? ? ? ? ? ? ? ? ? ? ?

?NSString *urlString = [[NSString stringWithFormat:@"comgooglemaps://?x-source=%@&x-success=%@&saddr=&daddr=%f,%f&directionsmode=driving",appName,urlScheme,coordinate.latitude, coordinate.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];? ? ? ? ? ? ? ? ? ? ? [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];? ? ? ? ??

}];? ? ? ? ? ? ? ??

[alert addAction:action];? ??

}? ? ? ??

UIAlertAction *action = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];? ? [alert addAction:action];? ? ? ??

[self presentViewController:alert animated:YES completion:^{? ? ? ? ??

}];? ??

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末咧最,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子御雕,更是在濱河造成了極大的恐慌矢沿,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酸纲,死亡現(xiàn)場離奇詭異捣鲸,居然都是意外死亡,警方通過查閱死者的電腦和手機闽坡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門栽惶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人无午,你說我怎么就攤上這事媒役。” “怎么了宪迟?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵酣衷,是天一觀的道長。 經(jīng)常有香客問我次泽,道長穿仪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任意荤,我火速辦了婚禮啊片,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘玖像。我一直安慰自己紫谷,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布捐寥。 她就那樣靜靜地躺著笤昨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪握恳。 梳的紋絲不亂的頭發(fā)上瞒窒,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機與錄音乡洼,去河邊找鬼崇裁。 笑死匕坯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拔稳。 我是一名探鬼主播葛峻,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼壳炎!你這毒婦竟也來了泞歉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤匿辩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后榛丢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铲球,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年晰赞,在試婚紗的時候發(fā)現(xiàn)自己被綠了稼病。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡掖鱼,死狀恐怖然走,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情戏挡,我是刑警寧澤芍瑞,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站褐墅,受9級特大地震影響拆檬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜妥凳,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一竟贯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逝钥,春花似錦屑那、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至磷箕,卻和暖如春选酗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背岳枷。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工芒填, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留呜叫,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓殿衰,卻偏偏與公主長得像朱庆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子闷祥,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354

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