美文网首页iOS知识集算法或者代码 ios零碎记录
iOS开发中的一些小技巧(不断更新)

iOS开发中的一些小技巧(不断更新)

作者: Pusswzy | 来源:发表于2016-09-02 16:19 被阅读833次

程序员其实就是在不断地学习中进步, 这个帖子会记录一些iOS开发中的小技巧, 我也会不断更新的, until I leave from iOS.

2016.09.02于广州 雨

1.设置UITextField的起始光标位置
光标的起始位置太靠近左侧

解决方法是UITextField有一个leftView属性, 使用改属性即可解决该问题.

UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, wantWidth, searchTextField.my_height)];
    searchTextField.leftViewMode = UITextFieldViewModeAlways;
    leftView.backgroundColor = [UIColor clearColor];
    searchTextField.leftView = leftView;

其中wantSize就是光标距离textField左侧的距离, 而且一定要设置leftViewMode, 否则leftView是不会显示的, 因为leftView是默认UITextFieldViewModeNever.

typedef NS_ENUM(NSInteger, UITextFieldViewMode) {
    UITextFieldViewModeNever,
    UITextFieldViewModeWhileEditing,
    UITextFieldViewModeUnlessEditing,
    UITextFieldViewModeAlways
};
设置完leftView

这样是不是就好看多了~

2.导航栏的隐藏问题

当从一个没有导航栏的控制器A push一个应该有导航栏的控制器B中.
可以在A的viewWillAppear中写[self.navigationController setNavigationBarHidden:YES];
在B的viewDidLoad中写[self.navigationController setNavigationBarHidden:NO];
乍看之下是解决了这个问题. 可是当你在B控制器中用侧滑返回到一半, 接着又不想返回到A控制器了,再回到B控制器你会发现B的导航栏消失了.

导航栏消失
你在网上寻求解决方法, 哦, 原来应该在B控制器中的viewWillAppear中写[self.navigationController setNavigationBarHidden:NO];. 你满心欢喜认为问题解决了, 可是你在侧滑返回的时候导航栏仍然是隐藏的, 是因为此时已经触发了A控制器的viewWillAppear方法.下面是解决方法:
在不显示导航栏的控制器(A), 遵循导航栏的代理.实现其代理方法:
#pragma mark - UINavigationControllerDelegate
-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
    BOOL isShowBar = [viewController isKindOfClass:[self class]];
    [self.navigationController setNavigationBarHidden:isShowBar animated:YES];
}
这样导航栏就不会隐藏了

2016.09.19 最近比较闲,项目等待审核呢,天天自己看看书挺好的

3.在APPDelegate显示UIAlertViewController

UIAlertView在8.0的时候已经过期了,很多SDK种在APPDelegate中仍使用 UIAlertView,就会报警告.

因此需要将 UIAlertView替换为 UIAlertViewController, 在UIViewController中显示UIAlertViewController是很简单的,只需要modal就可以.但是如何在APPDelegate显示呢? 下面上代码

  UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"在APPDelegate中打开UIAlertController" message:@"开~" preferredStyle:UIAlertControllerStyleAlert];
    [self.window.rootViewController presentViewController:alert animated:YES completion:nil];
这样就可以解决了

2016.11.02 广州,进步中.

4.改变不同状态下的UIButton的背景颜色

最近要做充值页面, 金额按钮在选中状态的背景颜色需要变成橙色


充值页面

UIButton只有一个backgroundColor的属性, 无法根据不同状态改变背景颜色.
但是UIButton有这样一个接口, 根据不同状态修改背景图片

- (void)setBackgroundImage:(nullable UIImage *)image forState:(UIControlState)state UI_APPEARANCE_SELECTOR;

所以我们可以将颜色装换成图片, 写一个UIImgae的分类

+ (UIImage *)imageWithColor:(UIColor *)color {
    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    
    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextFillRect(context, rect);
    
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return image;
}

这样就可以完成需求了

[self.selectMoneyBtn setBackgroundImage:[UIImage imageWithColor:[UIColor whiteColor]] forState:UIControlStateNormal];
[self.selectMoneyBtn setBackgroundImage:[UIImage imageWithColor:LHZColor(255, 242, 236)] forState:UIControlStateSelected];

2017.05.02 好久没更新了, 不喜欢转载那些已经被别人转无数次的东西, 自己的积累又不够,导致更新这么慢

5.在NSConcreteValue中取出CGRect的值

KVO监听某一个对象frame的改变, 在- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context这个方法中,通过change这个字典拿到前后改变的frame.
可是当你用[change objectForKey:NSKeyValueChangeNewKey]或者[change objectForKey:NSKeyValueChangeOldKey]取值时,却发现得出的类型是NSConcreteValue.这下该如何是好呢?其实很简单,先将值类型由NSConcreteValue转为NSString, 就可以得到CGRect咯/

NSString *oldFrameStr = [NSString stringWithFormat:@"%@", [change objectForKey:NSKeyValueChangeOldKey]];
CGRect oldFrame = CGRectFromString(oldFrameStr);

注意点, 第一步转换的时候不要用NSString *oldFrameStr = (NSString *) [change objectForKey:NSKeyValueChangeOldKey];

相关文章

  • iOS开发中的一些小技巧(不断更新)

    程序员其实就是在不断地学习中进步, 这个帖子会记录一些iOS开发中的小技巧, 我也会不断更新的, until I ...

  • iOS开发技巧-不断更新中

    一些开发的小技巧分享~1、PrefixHeader导入位置写法 2、隐藏导航栏的两种方式 3、TabBarItem...

  • iOS开发中的一些小技巧

    Cocoapods问题 Podfile.lock该文件用来记录和追踪生成的Pod版本。 pod install每次...

  • iOS开发中的一些小技巧

    1. 转移APPDelegate-application: didFinishLaunchingWithOptio...

  • iOS开发中的一些小技巧

    1、取出UISearchBar中的控件进行属性设置 类似的,按钮之类的控件也可以用KVC进行对私有属性赋值或者更改...

  • iOS开发的一些小技巧

    这里,给大家介绍一些在开发过程中的一些小技巧。顺便打个小广告,昨天。我申请了一个专题《iOS开发技巧》,欢迎大家关...

  • iOS开发Tips(持续更新)·····

    ·本文旨在总结iOS开发中一些小技巧,帮助更高效进行代码编写:1、 纯代码开发中便于展示一些控件所在空间位置来使用...

  • iOS开发调试技巧总结

    iOS开发调试技巧总结 iOS开发调试技巧总结

  • iOS开发一些小技巧

    叶神的博客1 叶神的博客2 叶神的博客3 获取APP的Launch Image 如果有个需求,我们想在APP内部还...

  • IOS开发的一些小技巧

    在实际的开发中掌握一些小的开发技巧,往往会让你的开发效率显著提升。下面是我自己总结的一些小的开发技巧,希望对感兴趣...

网友评论

    本文标题:iOS开发中的一些小技巧(不断更新)

    本文链接:https://www.haomeiwen.com/subject/xutkettx.html