iOS 開發(fā)雜記

拋出異常

NSException* ex = [NSException exceptionWithName:@"name" reason:@"reason" userInfo:nil];
[ex raise];

UILabel文字添加刪除線

    NSAttributedString* attrStr =
        [[NSAttributedString alloc] initWithString:@"ddddd"
                                        attributes:
                                            @{ NSFontAttributeName : [UIFont systemFontOfSize:20.f],
                                                NSForegroundColorAttributeName : [UIColor redColor],
                                                NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle | NSUnderlinePatternSolid),
                                                NSStrikethroughColorAttributeName : [UIColor blueColor] }];
    self.label.attributedText = [attrStr copy];

自定義控件的數(shù)據(jù)源設(shè)置

自定義控件應(yīng)該自己定義相關(guān)的數(shù)據(jù)源怕品,
然后其他數(shù)據(jù)源想要使用這個(gè)自定義控件,
就把自定義控件的模型放到數(shù)據(jù)源模型中饥漫,
然后通過(guò)setValue :forKey :來(lái)進(jìn)行對(duì)自定義控件的模型賦值畅买。

NSString

//去掉空格
NSString* _titleLabelOutSpace = [text stringByReplacingOccurrencesOfString:@" " withString:@""];
//NSString ->NSInteger
[_titleLabelOutSpace integerValue];

NSArray

//NSString  NSArray  互轉(zhuǎn)
NSArray *arr = [@"a,b,c" componentsSeparatedByString:@","];


- (void)hasString:(NSString*)str1 string2:(NSString*)str2
{
    NSString* string1 = str1;
    NSString* string2 = str2;
    NSRange range = [string1 rangeOfString:string2];
    NSUInteger location = range.location;
    NSUInteger length = range.length;
    NSString* astring = [[NSString alloc] initWithString:[NSString stringWithFormat:@"Location:%zd,Leight:%zd", location, length]];
    NSLog(@"astring:%@", astring);
}
    [self hasString:@"1111111" string2:@"2"];
   //astring:Location:9223372036854775807, length:0
    [self hasString:@"11111112" string2:@"2"];
   //astring:Location:8,Leight:1
可以根據(jù)length來(lái)判斷是否有字段

數(shù)組排序

[self.HelpManager.PublishScopeList sortedArrayUsingComparator:^NSComparisonResult(PublishScopeListModel* obj1, PublishScopeListModel* obj2) {

        NSComparisonResult result = [obj1.num compare:obj2.num];
        return result == NSOrderedAscending; // 降序:NSOrderedAscending====升序:NSOrderedDescending
    }];

為UICollectionView添加頭視圖的兩種方式

  • 給UICollectionView添加:UICollectionElementKindSectionHeader
  • 設(shè)置UICollectionView的:contentInset
- (UICollectionReusableView*)collectionView:(UICollectionView*)collectionView viewForSupplementaryElementOfKind:(NSString*)kind atIndexPath:(NSIndexPath*)indexPath
{
    UICollectionReusableView* cell = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"_CollectionReusableViewIndetifier" forIndexPath:indexPath];
    return cell;
}
- (CGSize)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section;
{
    return CGSizeMake(ScreenWidth, 44);
}
    CGFloat _adH = 120.0;
    self.collectionView.contentInset = UIEdgeInsetsMake(_adH, 0, 0, 0);
    [self.adImgeView setFrame:CGRectMake(0, CGRectGetMinY(self.collectionView.frame) - _adH, CGRectGetWidth(self.collectionView.frame), _adH)];

TableViewCell創(chuàng)建技巧

#import <UIKit/UIKit.h>
static NSString* SEGPictorialDetailADCellIdentifier = @"SEGPictorialDetailADCellIdentifier";

static NSString* SEGHelpViewCellIdentifier = @"_SEGHelpViewCellIdentifier";  
static NSString* SEGHelpViewCellDetailTopIdentifier = @"_SEGHelpViewCellDetailTopIdentifier";  
static NSString* SEGHelpViewCellDetailDwonIdentifier = @"_SEGHelpViewCellDetailDwonIdentifier";   


@interface SEGPictorialDetailADCell : UITableViewCell
+ (instancetype)cellWithTableView:(UITableView*)tableView;
+ (instancetype)cellWithTableView:(UITableView*)tableView reuseIdentifier:(NSString*)reuseIdentifier;
@end

#import "SEGPictorialDetailADCell.h"

@implementation SEGPictorialDetailADCell

+ (instancetype)cellWithTableView:(UITableView*)tableView
{
    SEGPictorialDetailADCell* cell = [tableView dequeueReusableCellWithIdentifier:SEGPictorialDetailADCellIdentifier];

    if (cell == nil) {

        cell = [[SEGPictorialDetailADCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SEGPictorialDetailADCellIdentifier];
    }


    return cell;
}

+ (instancetype)cellWithTableView:(UITableView*)tableView reuseIdentifier:(NSString*)reuseIdentifier
{
    SEGHelpViewCell* cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];

    if (cell == nil) {
        cell = [[SEGHelpViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
    }

    return cell;
}

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString*)reuseIdentifier
{
    self.CellIdentifier = reuseIdentifier;//通過(guò)記錄不同的ID來(lái)布置對(duì)應(yīng)的界面
    if (self == [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
    }

    return self;
}
@end

TableHeaderView動(dòng)態(tài)改變高度

[self.tableView beginUpdates];
[self.tableView setTableHeaderView:self.webView];
[self.tableView endUpdates];

去掉多余的空白的cell

self.contactsTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

切割圖片

UIImage* Image = [UIImage imageNamed:@"RedButton"];
Image = [logBackgroundImage stretchableImageWithLeftCapWidth:logBackgroundImage.size.width * 0.5 topCapHeight:logBackgroundImage.size.height * 0.5];
[self.loginBtn setBackgroundImage:Image forState:UIControlStateNormal];

實(shí)現(xiàn)跳轉(zhuǎn)safari漓糙,phone或message

//調(diào)用 電話phone
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://10086"]];

//調(diào)用自帶 瀏覽器 safari
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.baidu.com"]];

//調(diào)用 自帶mail
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://sam@icloud.com"]];

//調(diào)用 SMS
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://111111"]];

//跳轉(zhuǎn)到系統(tǒng)設(shè)置相關(guān)界面
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=WIFI"]];

程序中獲取軟件的版本號(hào)和app名稱

應(yīng)用程序的名稱和版本號(hào)等信息都保存在mainBundle的infoDictionary字典中,用下面代碼可以取出來(lái)。  
NSDictionary* infoDict =[[NSBundle mainBundle] infoDictionary];  
NSString* versionNum =[infoDict objectForKey:@"CFBundleVersion"];//版本名稱  
NSString*appName =[infoDict objectForKey:@"CFBundleDisplayName"];//app名稱 

在有uinavigation,uitoolbar的情況下弧圆,如何添加一個(gè)全屏的 uiview (作為顯示一個(gè)進(jìn)度框击费,任何區(qū)域無(wú)法觸摸而使用)

[[UIApplication sharedApplication].keyWindow addSubview:waitingview]; 

在項(xiàng)目用代碼打開AppStore

NSString *url = [NSString stringWithFormat:@"http://itunes.apple.com/cn/app/huo-xing-she-xin-dian/id549425594?l=en&mt=8"];  
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];

使屏幕一直保持喚醒狀態(tài)拢蛋?(就是不自動(dòng)黑屏)

[[UIApplication sharedApplication] setIdleTimerDisabled:YES];

隱藏UINavigationBar

- (void)viewWillAppear:(BOOL)animated
{
    [self.navigationControllersetNavigationBarHidden:YESanimated:YES]; //設(shè)置隱藏
    [super viewWillAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated
{
    [self.navigationControllersetNavigationBarHidden:NOanimated:YES];//設(shè)置顯示
    [super viewWillDisappear:animated];
}

在navigationviewcontroller中,pop到指定的VC

NSArray *viewControllers=[self.navigationController viewControllers];  
UIViewController *controller=[viewControllers objectAtIndex:1];  //跳轉(zhuǎn)到第一個(gè)VC
[self.navigationController popToViewController:controller animated:YES];  

獲取手機(jī)硬件信息

[[UIDevice currentDevice] systemName];[[UIDevice currentDevice] systemVersion];
[[UIDevice currentDevice] uniqueIdentifier];
[[UIDevice currentDevice] model];
[[UIDevice currentDevice] name];

真機(jī)上結(jié)果:
System Name: iPhone OSSystem 
Version: 4.2.1
Unique ID: 9b5ded78d5fa0ac96250f8b4af0e46f40b96ea6d
Model: iPhone
Name: “wwk”的 iPhone

模擬器上結(jié)果:
System Name: iPhone OSSystem 
Version: 4.2
Unique ID: 21FFE0FF-429B-5D0B-96D2-EADCA3203260
Model: iPhone Simulator
Name: iPhone Simulator

URL編碼蔫巩、解碼

// 1. URL編碼:ios中http請(qǐng)求遇到漢字的時(shí)候谆棱,需要轉(zhuǎn)化成UTF-8:
 NSString* urlString = @"http://www.baidu.com!name=小明";
NSString * encodingString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//結(jié)果:http://www.baidu.com!name=%E5%B0%8F%E6%98%8E

// 2.URL解碼:請(qǐng)求后,返回的數(shù)據(jù)圆仔,如何顯示的是這樣的格式:%3A%2F%2F垃瞧,此時(shí)需要我們進(jìn)行UTF-8解碼,用到的方法是:
NSString *str = [encodingString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

獲取URL中的細(xì)節(jié)

NSURL* url = [NSURL URLWithString:@"http://www.baidu.com/s?tn=baiduhome_pg&bs=NSRUL&f=8&rsv_bp=1&rsv_spt=1&wd=NSurl&inputT=2709"];
    NSLog(@"Scheme: %@", [url scheme]);
    NSLog(@"Host: %@", [url host]);
    NSLog(@"Port: %@", [url port]);
    NSLog(@"Path: %@", [url path]);
    NSLog(@"Relative path: %@", [url relativePath]);
    NSLog(@"Path components as array: %@", [url pathComponents]);
    NSLog(@"Parameter string: %@", [url parameterString]);
    NSLog(@"Query: %@", [url query]);
    NSLog(@"Fragment: %@", [url fragment]);
    NSLog(@"User: %@", [url user]);
    NSLog(@"Password: %@", [url password]);

/*
2016-05-27 11:38:23.503 FourNews[2358:116708] Scheme: http
2016-05-27 11:38:23.504 FourNews[2358:116708] Host: www.baidu.com
2016-05-27 11:38:23.504 FourNews[2358:116708] Port: (null)
2016-05-27 11:38:23.504 FourNews[2358:116708] Path: /s
2016-05-27 11:38:23.504 FourNews[2358:116708] Relative path: /s
2016-05-27 11:38:23.504 FourNews[2358:116708] Path components as array: (
    "/",
    s
)
2016-05-27 11:38:23.504 FourNews[2358:116708] Parameter string: (null)
2016-05-27 11:38:23.505 FourNews[2358:116708] Query: tn=baiduhome_pg&bs=NSRUL&f=8&rsv_bp=1&rsv_spt=1&wd=NSurl&inputT=2709
2016-05-27 11:38:23.505 FourNews[2358:116708] Fragment: (null)
2016-05-27 11:38:23.505 FourNews[2358:116708] User: (null)
2016-05-27 11:38:23.505 FourNews[2358:116708] Password: (null)
*/

獲取URL中的參數(shù)

- (NSDictionary*)dictionaryFromQuery:(NSString*)query usingEncoding:(NSStringEncoding)encoding
{
    NSCharacterSet* delimiterSet = [NSCharacterSet characterSetWithCharactersInString:@"&;"];
    NSMutableDictionary* pairs = [NSMutableDictionary dictionary];
    NSScanner* scanner = [[NSScanner alloc] initWithString:query];
    while (![scanner isAtEnd]) {
        NSString* pairString = nil;
        [scanner scanUpToCharactersFromSet:delimiterSet intoString:&pairString];
        [scanner scanCharactersFromSet:delimiterSet intoString:NULL];
        NSArray* kvPair = [pairString componentsSeparatedByString:@"="];
        if (kvPair.count == 2) {
            NSString* key = [[kvPair objectAtIndex:0]
                stringByReplacingPercentEscapesUsingEncoding:encoding];
            NSString* value = [[kvPair objectAtIndex:1]
                stringByReplacingPercentEscapesUsingEncoding:encoding];
            [pairs setObject:value forKey:key];
        }
    }

    return [NSDictionary dictionaryWithDictionary:pairs];
}

[**ViewController respondsToSelector:]: message sent to deallocated instance崩潰問(wèn)題解決方法

這是因?yàn)檫@個(gè)UIViewController釋放后荧缘,又再次向這個(gè)VC調(diào)用了某些請(qǐng)求導(dǎo)致的皆警,一般出現(xiàn)這種報(bào)錯(cuò)是UIViewController里面有設(shè)置xxx.delegate=self,這些代理有延時(shí)方法截粗,例如等待網(wǎng)絡(luò)返回等
當(dāng)導(dǎo)航欄直接返回時(shí)信姓,UIViewController已經(jīng)被銷毀,延時(shí)方法再調(diào)用此野指針VC绸罗,便會(huì)導(dǎo)致崩潰
解決方法:
1 在dealloc中設(shè)置xx.delegate = nil 意推,這個(gè)是程序沒有使用ARC才可以
2 在viewWillDisappear方法中把所有xxx.delegate=self的具有延時(shí)方法的delegate置nil,我的做法是不過(guò)有沒有延時(shí)方法珊蟀,

UIView有關(guān)的雜技

//設(shè)置View的圓角:
[view.layer setCornerRadius:15.0];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末菊值,一起剝皮案震驚了整個(gè)濱河市外驱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌腻窒,老刑警劉巖昵宇,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異儿子,居然都是意外死亡瓦哎,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門柔逼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蒋譬,“玉大人,你說(shuō)我怎么就攤上這事愉适》钢” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵维咸,是天一觀的道長(zhǎng)剂买。 經(jīng)常有香客問(wèn)我,道長(zhǎng)腰湾,這世上最難降的妖魔是什么雷恃? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮费坊,結(jié)果婚禮上倒槐,老公的妹妹穿的比我還像新娘。我一直安慰自己附井,他們只是感情好讨越,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著永毅,像睡著了一般把跨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沼死,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天着逐,我揣著相機(jī)與錄音,去河邊找鬼意蛀。 笑死耸别,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的县钥。 我是一名探鬼主播秀姐,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼若贮!你這毒婦竟也來(lái)了省有?” 一聲冷哼從身側(cè)響起痒留,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蠢沿,沒想到半個(gè)月后伸头,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡舷蟀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年熊锭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雪侥。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖精绎,靈堂內(nèi)的尸體忽然破棺而出速缨,到底是詐尸還是另有隱情,我是刑警寧澤代乃,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布旬牲,位于F島的核電站,受9級(jí)特大地震影響搁吓,放射性物質(zhì)發(fā)生泄漏原茅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一堕仔、第九天 我趴在偏房一處隱蔽的房頂上張望擂橘。 院中可真熱鬧,春花似錦摩骨、人聲如沸通贞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)昌罩。三九已至,卻和暖如春灾馒,著一層夾襖步出監(jiān)牢的瞬間茎用,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工睬罗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留轨功,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓傅物,卻偏偏與公主長(zhǎng)得像夯辖,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子董饰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

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

  • 下面的內(nèi)容基本都是我親測(cè)的 Xcode目錄位置:~/Library/Developer/Xcode/ Code S...
    Mr_Zander閱讀 334評(píng)論 0 1
  • 因?yàn)橛浶圆缓幂锕樱3圆米?吹近c(diǎn)東西,都感覺很好啄栓,但是經(jīng)常時(shí)間一長(zhǎng)都忘了娄帖,所以現(xiàn)在些雜記,記住這些昙楚。慢慢補(bǔ)充近速。 1.iOS...
    小小看護(hù)閱讀 125評(píng)論 0 0
  • 雜記: 1.安裝Xcode插件管理終端命令: curl -fsSL https://raw.githubuserc...
    suncorex閱讀 236評(píng)論 0 1
  • iOS類庫(kù)合集: http://www.code4app.com/thread-7831-1-1.htmliOS最...
    暮雨飛煙閱讀 144評(píng)論 0 0
  • 1,Search Bar 怎樣去掉背景的顏色(storyboard里只能設(shè)置background顏色,可是發(fā)現(xiàn)cl...
    以德扶人閱讀 2,350評(píng)論 2 50