1,打印View全部子視圖app
po [[self view]recursiveDescription]
2,layoutSubviews調用的調用時機dom
* 當視圖第一次顯示的時候會被調用 * 當這個視圖顯示到屏幕上了,點擊按鈕 * 添加子視圖也會調用這個方法 * 當本視圖的大小發生改變的時候是會調用的 * 當子視圖的frame發生改變的時候是會調用的 * 當刪除子視圖的時候是會調用的
3,NSString過濾特殊字符ide
// 定義一個特殊字符的集合 NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString: @"@/:;()¥「」"、[]{}#%-*+=_\\|~<>$€^•'@#$%^&*()_+'\""]; // 過濾字符串的特殊字符 NSString *newString = [trimString stringByTrimmingCharactersInSet:set];
4,TransForm屬性函數
//平移按鈕 CGAffineTransform transForm = self.buttonView.transform; self.buttonView.transform = CGAffineTransformTranslate(transForm, 10, 0); //旋轉按鈕 CGAffineTransform transForm = self.buttonView.transform; self.buttonView.transform = CGAffineTransformRotate(transForm, M_PI_4); //縮放按鈕 self.buttonView.transform = CGAffineTransformScale(transForm, 1.2, 1.2); //初始化復位 self.buttonView.transform = CGAffineTransformIdentity;
5,去掉分割線多餘15像素字體
首先在viewDidLoad方法加入如下代碼:
if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) { [self.tableView setSeparatorInset:UIEdgeInsetsZero]; } if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) { [self.tableView setLayoutMargins:UIEdgeInsetsZero]; } 而後在重寫willDisplayCell方法 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ if ([cell respondsToSelector:@selector(setSeparatorInset:)]) { [cell setSeparatorInset:UIEdgeInsetsZero]; } if ([cell respondsToSelector:@selector(setLayoutMargins:)]) { [cell setLayoutMargins:UIEdgeInsetsZero]; } }
6,計算方法耗時時間間隔ui
// 獲取時間間隔 #define TICK CFAbsoluteTime start = CFAbsoluteTimeGetCurrent(); #define TOCK NSLog(@"Time: %f", CFAbsoluteTimeGetCurrent() - start)
7,Color顏色宏定義url
// 隨機顏色 #define RANDOM_COLOR [UIColor colorWithRed:arc4random_uniform(256) / 255.0 green:arc4random_uniform(256) / 255.0 blue:arc4random_uniform(256) / 255.0 alpha:1] // 顏色(RGB) #define RGBCOLOR(r, g, b) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1] #define RGBACOLOR(r, g, b, a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)]
8,Alert提示宏定義spa
#define Alert(_S_, ...) [[[UIAlertView alloc] initWithTitle:@"提示" message:[NSString stringWithFormat:(_S_), ##__VA_ARGS__] delegate:nil cancelButtonTitle:@"肯定" otherButtonTitles:nil] show]
8,讓 iOS 應用直接退出code
- (void)exitApplication { AppDelegate *app = [UIApplication sharedApplication].delegate; UIWindow *window = app.window; [UIView animateWithDuration:1.0f animations:^{ window.alpha = 0; } completion:^(BOOL finished) { exit(0); }]; }
8,NSArray 快速求總和 最大值 最小值 和 平均值orm
NSArray *array = [NSArray arrayWithObjects:@"2.0", @"2.3", @"3.0", @"4.0", @"10", nil]; CGFloat sum = [[array valueForKeyPath:@"@sum.floatValue"] floatValue]; CGFloat avg = [[array valueForKeyPath:@"@avg.floatValue"] floatValue]; CGFloat max =[[array valueForKeyPath:@"@max.floatValue"] floatValue]; CGFloat min =[[array valueForKeyPath:@"@min.floatValue"] floatValue]; NSLog(@"%f\n%f\n%f\n%f",sum,avg,max,min);
9,修改Label中不一樣文字顏色
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [self editStringColor:self.label.text editStr:@"好" color:[UIColor blueColor]]; } - (void)editStringColor:(NSString *)string editStr:(NSString *)editStr color:(UIColor *)color { // string爲總體字符串, editStr爲須要修改的字符串 NSRange range = [string rangeOfString:editStr]; NSMutableAttributedString *attribute = [[NSMutableAttributedString alloc] initWithString:string]; // 設置屬性修改字體顏色UIColor與大小UIFont [attribute addAttributes:@{NSForegroundColorAttributeName:color} range:range]; self.label.attributedText = attribute; }
10,播放聲音
#import<AVFoundation/AVFoundation.h> // 1.獲取音效資源的路徑 NSString *path = [[NSBundle mainBundle]pathForResource:@"pour_milk" ofType:@"wav"]; // 2.將路勁轉化爲url NSURL *tempUrl = [NSURL fileURLWithPath:path]; // 3.用轉化成的url建立一個播放器 NSError *error = nil; AVAudioPlayer *play = [[AVAudioPlayer alloc]initWithContentsOfURL:tempUrl error:&error]; self.player = play; // 4.播放 [play play];
11,檢測是否IPad Pro
- (BOOL)isIpadPro { UIScreen *Screen = [UIScreen mainScreen]; CGFloat width = Screen.nativeBounds.size.width/Screen.nativeScale; CGFloat height = Screen.nativeBounds.size.height/Screen.nativeScale; BOOL isIpad =[[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad; BOOL hasIPadProWidth = fabs(width - 1024.f) < DBL_EPSILON; BOOL hasIPadProHeight = fabs(height - 1366.f) < DBL_EPSILON; return isIpad && hasIPadProHeight && hasIPadProWidth; }
11,修改Tabbar Item的屬性
// 修改標題位置 self.tabBarItem.titlePositionAdjustment = UIOffsetMake(0, -10); // 修改圖片位置 self.tabBarItem.imageInsets = UIEdgeInsetsMake(-3, 0, 3, 0); // 批量修改屬性 for (UIBarItem *item in self.tabBarController.tabBar.items) { [item setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIFont fontWithName:@"Helvetica" size:19.0], NSFontAttributeName, nil] forState:UIControlStateNormal]; } // 設置選中和未選中字體顏色 [[UITabBar appearance] setShadowImage:[[UIImage alloc] init]]; //未選中字體顏色 [[UITabBarItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor greenColor]} forState:UIControlStateNormal]; //選中字體顏色 [[UITabBarItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor cyanColor]} forState:UIControlStateSelected];
12,NULL - nil - Nil - NSNULL的區別
* nil是OC的,空對象,地址指向空(0)的對象。對象的字面零值 * Nil是Objective-C類的字面零值 * NULL是C的,空地址,地址的數值是0,是個長整數 * NSNull用於解決向NSArray和NSDictionary等集合中添加空值的問題
11,去掉BackBarButtonItem的文字
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetrics:UIBarMetricsDefault];
12,控件不能交互的一些緣由
1,控件的userInteractionEnabled = NO 2,透明度小於等於0.01,aplpha 3,控件被隱藏的時候,hidden = YES 4,子視圖的位置超出了父視圖的有效範圍,子視圖沒法交互,設置了
12,修改UITextField中Placeholder的文字顏色
[text setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"]; }
13,視圖的生命週期
一、 alloc 建立對象,分配空間 二、 init (initWithNibName) 初始化對象,初始化數據 三、 loadView 從nib載入視圖 ,除非你沒有使用xib文件建立視圖 四、 viewDidLoad 載入完成,能夠進行自定義數據以及動態建立其餘控件 五、 viewWillAppear視圖將出如今屏幕以前,立刻這個視圖就會被展示在屏幕上了 六、 viewDidAppear 視圖已在屏幕上渲染完成 一、viewWillDisappear 視圖將被從屏幕上移除以前執行 二、viewDidDisappear 視圖已經被從屏幕上移除,用戶看不到這個視圖了 三、dealloc 視圖被銷燬,此處須要對你在init和viewDidLoad中建立的對象進行釋放. viewVillUnload- 當內存太低,即將釋放時調用; viewDidUnload-當內存太低,釋放一些不須要的視圖時調用。
14,應用程序的生命週期
1,啓動但還沒進入狀態保存 : - (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions 2,基本完成程序準備開始運行: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 3,當應用程序將要入非活動狀態執行,應用程序不接收消息或事件,好比來電話了: - (void)applicationWillResignActive:(UIApplication *)application 4,當應用程序入活動狀態執行,這個恰好跟上面那個方法相反: - (void)applicationDidBecomeActive:(UIApplication *)application 5,當程序被推送到後臺的時候調用。因此要設置後臺繼續運行,則在這個函數裏面設置便可: - (void)applicationDidEnterBackground:(UIApplication *)application 6,當程序從後臺將要從新回到前臺時候調用,這個恰好跟上面的那個方法相反: - (void)applicationWillEnterForeground:(UIApplication *)application 7,當程序將要退出是被調用,一般是用來保存數據和一些退出前的清理工做: - (void)applicationWillTerminate:(UIApplication *)application
15,判斷view是否是指定視圖的子視圖
BOOL isView = [textView isDescendantOfView:self.view];
16,判斷對象是否遵循了某協議
if ([self.selectedController conformsToProtocol:@protocol(RefreshPtotocol)]) { [self.selectedController performSelector:@selector(onTriggerRefresh)]; }
17,頁面強制橫屏
#pragma mark - 強制橫屏代碼 - (BOOL)shouldAutorotate{ //是否支持轉屏 return NO; } - (UIInterfaceOrientationMask)supportedInterfaceOrientations{ //支持哪些轉屏方向 return UIInterfaceOrientationMaskLandscape; } - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{ return UIInterfaceOrientationLandscapeRight; } - (BOOL)prefersStatusBarHidden{ return NO; }
18,系統鍵盤通知消息
一、UIKeyboardWillShowNotification-將要彈出鍵盤 二、UIKeyboardDidShowNotification-顯示鍵盤 三、UIKeyboardWillHideNotification-將要隱藏鍵盤 四、UIKeyboardDidHideNotification-鍵盤已經隱藏 五、UIKeyboardWillChangeFrameNotification-鍵盤將要改變frame 六、UIKeyboardDidChangeFrameNotification-鍵盤已經改變frame
19,關閉navigationController的滑動返回手勢
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
20,設置狀態欄爲任意的顏色
- (void)setStatusColor { UIView *statusBarView = [[UIView alloc] initWithFrame:CGRectMake(0, 0,[UIScreen mainScreen].bounds.size.width, 20)]; statusBarView.backgroundColor = [UIColor orangeColor]; [self.view addSubview:statusBarView]; }
21,讓Xcode的控制檯支持LLDB類型的打印
打開終端輸入三條命令:
touch ~/.lldbinit
echo display @import UIKit >> ~/.lldbinit echo target stop-hook add -o \"target stop-hook disable\" >> ~/.lldbinit
下次從新運行項目,而後就不報錯了。
22,Label行間距
-(void)test{ NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:self.contentLabel.text]; NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; [paragraphStyle setLineSpacing:3]; //調整行間距 [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [self.contentLabel.text length])]; self.contentLabel.attributedText = attributedString; }
23,UIImageView填充模式
@"UIViewContentModeScaleToFill", // 拉伸自適應填滿整個視圖 @"UIViewContentModeScaleAspectFit", // 自適應比例大小顯示 @"UIViewContentModeScaleAspectFill", // 原始大小顯示 @"UIViewContentModeRedraw", // 尺寸改變時重繪 @"UIViewContentModeCenter", // 中間 @"UIViewContentModeTop", // 頂部 @"UIViewContentModeBottom", // 底部 @"UIViewContentModeLeft", // 中間貼左 @"UIViewContentModeRight", // 中間貼右 @"UIViewContentModeTopLeft", // 貼左上 @"UIViewContentModeTopRight", // 貼右上 @"UIViewContentModeBottomLeft", // 貼左下 @"UIViewContentModeBottomRight", // 貼右下
24,宏定義檢測block是否可用
#define BLOCK_EXEC(block, ...) if (block) { block(__VA_ARGS__); }; // 宏定義以前的用法 if (completionBlock) { completionBlock(arg1, arg2); } // 宏定義以後的用法 BLOCK_EXEC(completionBlock, arg1, arg2);