iOS开发零碎知识点

本篇文章记录了iOS开发零碎知识点,简单又实用!

代码写了这么多,但是总是有些知识点在真正需要用到的时候却遗忘了,一直想整理这块知识,最近又总是在赶项目,不管再忙,这块总是要整理起来。


iOS开发零碎知识点

修改Cell分割线距离

修改UITableviewCell的分割线距离通常需要修改separatorInset属性的top, left, bottom, right:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {

    [cell setSeparatorInset:UIEdgeInsetsMake(0, 15, 0, 15)];

}

if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {

    [cell setSeparatorInset:UIEdgeInsetsMake(0, 15, 0, 15)];

}

if ([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {

    [cell setPreservesSuperviewLayoutMargins:NO];

}

}

去掉Cell的分割线

myTableView.separatorStyle = UITableViewCellSeparatorStyleNone;

取消Cell的选中效果

myTableView.selectionStyle = UITableViewCellSelectionStyleNone;

将汉字转换为拼音

可以把汉字字符串转换成拼音,并且支持是否在拼音间插入空格

- (NSString*)chineseToPinyin:(NSString*)chinese withSpace:(BOOL)withSpace {

    if(chinese) {

        CFStringRefhanzi = (__bridgeCFStringRef)chinese;

        CFMutableStringRefstring =CFStringCreateMutableCopy(NULL,0, hanzi);

        CFStringTransform(string,NULL, kCFStringTransformMandarinLatin,NO);

        CFStringTransform(string,NULL, kCFStringTransformStripDiacritics,NO);

        NSString*pinyin = (NSString*)CFBridgingRelease(string);

        if(!withSpace) {

            pinyin = [pinyin stringByReplacingOccurrencesOfString:@" "withString:@""];

        }

    return pinyin;

    }

return nil;

}

重置self.navigationController.viewControllers

NSArray*vcs = self.navigationController.viewControllers;

NSMutableArray*array = [NSMutableArrayarray];

for (inti =0; i < vcs.count; i++) {

UIViewController*temp = [vcsobjectAtIndex:i];

if (![tempisKindOfClass:NSClassFromString(viewControllersName)]) {

[arrayaddObject:temp];

}

}

[self.navigationControllersetViewControllers:arrayanimated:YES];

扩大UIButton点击区域

当UI设计图上的给出按钮尺寸较小,我们将对应的资源文件放入UIButton中,在真机调试中会发现难以点到按钮。这时候可以通过继承UIButton,重写pointInside方法,使得按钮事件响应不够我们设置的最小区域的自动扩大到我们的设置的最小区域。

.h定义我们设置的最小响应区域大小
/**

*  事件响应最小区域大小(小于此区域则放大,否则保持原大小不变,不赋值保持原大小不变)

*/

@property(nonatomic,assign)CGSizeeventFrame;

.m重写pointInside方法

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event{

CGRectbounds =self.bounds;

CGFloatwidthExtra = MAX(self.eventFrame.width- bounds.size.width,0);

CGFloatheightExtra = MAX(self.eventFrame.width- bounds.size.height,0);

bounds =CGRectInset(bounds, -0.5* widthExtra, -0.5* heightExtra);

returnCGRectContainsPoint(bounds, point);

}

判断非空字符串

+ (BOOL)isEmptyString:(NSString *)string {

if (string == nil || string == NULL) {

return YES;

}

if ([string isKindOfClass:[NSNull class]]) {

return YES;

}

if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]==0) {

return YES;

}

return NO;

}

设置抗压缩-抗拉伸

[self.textFiledsetContentHuggingPriority:UILayoutPriorityDefaultLowforAxis:UILayoutConstraintAxisHorizontal];[self.textFiledsetContentCompressionResistancePriority:UILayoutPriorityRequiredforAxis:UILayoutConstraintAxisHorizontal];[self.codeImageViewsetContentHuggingPriority:UILayoutPriorityRequiredforAxis:UILayoutConstraintAxisHorizontal];[self.codeImageViewsetContentCompressionResistancePriority:UILayoutPriorityRequiredforAxis:UILayoutConstraintAxisHorizontal];

首次进入某一功能模块判断

+ (BOOL)isFirstEnterNewModule{

if (![[NSUserDefaults standardUserDefaults] boolForKey:@"firstStart"]) {

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"firstStart"];

[[NSUserDefaults standardUserDefaults] synchronize];

return YES;

}

return NO;

}

视图过大不响应

子视图超出父视图,子视图点击事件不响应。一般子视图超出父视图,子视图点击等事件是不响应的,因为事件的传递链不会传到超出父视图的视图上面,需要我们用``hitTest:withEvent:``处理下。

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

    CGPoint hitPoint = [self.cardView.dayRateHelp convertPoint:point fromView:self];

    if ([self.cardView.dayRateHelp pointInside:hitPoint withEvent:event])

    return self.cardView.dayRateHelp;

    return [super hitTest:point withEvent:event];

}

注意:如果父视图是UIScrollView,需要设置`self.bgScrollView.clipsToBounds = NO;`,因为`UIScrollView`默认会进行裁剪,会导致超出的部分没有了。

修改holder

修改UITextField的Placeholder的文字颜色和大小。这里我们使用kvc设置UITextField的私有属性。

[textField setValue:placeholderLabelTextColor forKeyPath:@"_placeholderLabel.textColor"];[textField setValue:[UIFont systemFontOfSize:placeholderLabelFont] forKeyPath:@"_placeholderLabel.font"];

修改UIPageControl图片

修改UIPageControl的选中图片和默认图片。默认也是不允许修改的,需要用到kvc设置。

[self.pageControl setValue:currentImage forKey:@"_currentPageImage"];

[self.pageControl setValue:pageImage forKey:@"_pageImage"];

打电话

NSString *phoneNum = @"";

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

if ( !phoneCallWebView ) {

    phoneCallWebView = [[UIWebView alloc] initWithFrame:CGRectZero];

}

[phoneCallWebView loadRequest:[NSURLRequest requestWithURL:phoneURL]];

修改系统相机拍照功能

1、将使用照片改成保存至相册;

2、监听拍照按钮点击事件;

3、监听重拍按钮点击事件;

4、在拍照里面添加自定义view放到cameraOverlayView上。

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {

[self addSomeElements:viewController];

}

- (UIView *)findView:(UIView *)aView withName:(NSString *)name {

    Class cl = [aView class];

    NSString *desc = [cl description];

    if ([name isEqualToString:desc]) return aView;

    for (UIView *view in aView.subviews) {

        Class cll = [view class];

        NSString *stringl = [cll description];

        if ([stringl isEqualToString:name]) {

            return view;

        }

    }

    return nil;

}

- (void)addSomeElements:(UIViewController *)viewController {

    UIView *PLCropOverlay = [self findView:viewController.view withName:@"PLCropOverlay"];

    UIView *PLCropOverlayBottomBar = [self findView:PLCropOverlay withName:@"PLCropOverlayBottomBar"];

    UIView *PLCropOverlayPreviewBottomBar = [self findView:PLCropOverlayBottomBar withName:@"PLCropOverlayPreviewBottomBar"];

    UIButton *userButton = [PLCropOverlayPreviewBottomBar.subviews objectAtIndex:2];

    UIButton *viewbtn = [[UIButton alloc] init];

    [viewbtn setTitle:@"保存至相册" forState:UIControlStateNormal];

    [viewbtn setTitleColor:[UIColor whiteColor] forState:0];

    viewbtn.backgroundColor = RGB(19, 20, 21);

    [userButton addSubview:viewbtn];

    [viewbtn mas_makeConstraints:^(MASConstraintMaker *make) {

        make.trailing.equalTo(userButton.mas_trailing);

        make.centerY.equalTo(userButton);

}];

viewbtn.userInteractionEnabled = NO;

//给拍照加点击事件

UIView *CMKBottomBar = [self findView:viewController.view withName:@"CMKBottomBar"];

UIButton *CMKShutterButton = (UIButton *) [self findView:CMKBottomBar withName:@"CMKShutterButton"];

[CMKShutterButton addTarget:self action:@selector(shutterButtonClicked) forControlEvents:UIControlEventTouchUpInside];

//监听重拍

UIButton *resetButton = [PLCropOverlayPreviewBottomBar.subviews objectAtIndex:0];

[resetButton addTarget:self action:@selector(resetButtonClicked) forControlEvents:UIControlEventTouchUpInside];

}

注意:viewbtn.userInteractionEnabled = NO;的作用是防止这层视图的点击事件影响系统的使用照片按钮的点击事件;在这里给拍照按钮和重拍按钮添加了点击事件,既满足了自己需要做的事情,又不影响系统对这两个按钮的点击事件。

iOS10 UIPickerView线条不显示

#define IOS10_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >=10.0)

if (IOS10_OR_LATER) {

    for (UIView*separatorLine in pickerView.subviews) {

        if (separatorLine.frame.size.height<1) {

        separatorLine.backgroundColor= [UIColorwd_colorWithd0d0d0];

        }

    }

}

持续更新中。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容