iOS基础--一些常用的小知识总结

导入Xcode空模板

只需要把你下载好的空模板拷贝到该路径下即可.
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/Application

导入GDataXMLNode步骤如下:

导入libxml2.dylib库


添加libxml2.dylib库.png

先把类库拖入工程中
第一步:


导入GDataXMLNode时第一步.png

第二步:
导入GDataXMLNode时第二步.png

第三步:


导入GDataXMLNode第三步.png
在ARC工程中导入MRC的类和在MRC工程中导入ARC的类
    // 在ARC工程中导入MRC的类  我们选中工程->选中targets中的工程,然后选中Build Phases->在导入的类后边加入标记 -fno-objc-arc
    // 在MRC工程中导入ARC的类 路径与上面一致,在该类后面加上标记 -fobjc-arc

如图所示:


ARC工程中导入MRC的类需要做的一些改动.png
7.0以上URL发送请求,需要做如下修改

到Info.plist文件中添加:


请求URL.png
把图片做成圆形图标
        self.headIconImageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 40, 40)] ;
        self.headIconImageView.layer.cornerRadius = 20 ; // 设置半径
        self.headIconImageView.layer.masksToBounds = YES ; // 边界是否允许截取
根据UILabel里的内容自适应高度
    // 内容的自适应高度方法
     *  @param CGSize 规定文本显示的最大范围
        @param options 按照何种设置来计算范围
        @param attributes 文本内容的一些属性,例如字体大小,字体类型等  (字体不一样,高度也不一样)
        @parma context 上下文 可以规定一些其他的设置 但是一般都是nil
     */    
    // 枚举值中的 " | "  意思是要满足所有的枚举值设置.
NSString *contentString = [dic objectForKey:@"content"] ; //从字典中提取字符串
CGRect rect = [contentString boundingRectWithSize:CGSizeMake(tableView.bounds.size.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName :[UIFont systemFontOfSize:15]} context:nil] ;
根据汉字字符串获取该字符串的拼音然后取得首字母
分享资源    汉字转换为 拼音 获取首字母
//获取拼音首字母(传入汉字字符串, 返回大写拼音首字母)
/*
- (NSString *)firstCharactor:(NSString *)aString
{
    //转成了可变字符串
    NSMutableString *str = [NSMutableString stringWithString:aString];
    //先转换为带声调的拼音
    CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformMandarinLatin,NO);
    //再转换为不带声调的拼音
    CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformStripDiacritics,NO);
    //转化为大写拼音
    NSString *pinYin = [str capitalizedString];
    //获取并返回首字母
    return [pinYin substringToIndex:1];
}
*/
        NSString *string = @"简书" ;
        if ([string length])
        {
            NSMutableString *mutableString = [NSMutableString stringWithString:string] ;
            /**
             *  由于此方法是在coreFoundation框架下,咱们平时所使用的类型都是Foundation框架下的,所以需要转换类型.
             *
             *  @param string#>    string 所需要转换的原字符#>
             *  @param range#>     range 所需要转换字符的范围.如果为0或者是NULL意思是所有字符都转换#>
             *  @param transform#> transform 转换方式#>
             *  @param reverse#>   reverse 如果为YES,返回原字符串;如果为NO,返回转换之后的字符串#>
             *
             *  @return return value description
             */
            // 将所有非英文的字符转换为拉丁字母,并且带声调和重音标识
            // __bridge :只改变当前对象的类型,但是不改变对象内存的管理权限
            CFStringTransform((__bridge CFMutableStringRef)mutableString , 0,kCFStringTransformToLatin , NO) ;

            // 去掉声调
            CFStringTransform((__bridge CFMutableStringRef)mutableString , 0,kCFStringTransformStripDiacritics , NO) ;

            // 每个单词的首字母大写 后再截取字符串
            NSString *str = [[mutableString capitalizedString] substringToIndex:1];
        }
图片的渲染方式
[button setImage:[[UIImage imageNamed:@"1.jpg" ] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]  forState:UIControlStateNormal] ;
多个线程同时调用方法的时候,保证只有一个线程在使用该方法.
方法一:
static Singleton *singleton = nil ;

+ (Singleton *)defaultSingleton
{
    // 方法锁,作用为:当多个线程同时调用方法的时候,保证只有一个线程在使用该方法.例如:A和B同时调用defaultSingleton方法,如果A正在使用该方法,那么B就不能调用,直到A使用完成,B才会执行该方法.这个也保证单例对象的唯一性,避免初始化方法被同时多次执行.
    @synchronized(self)
    {
        if (singleton == nil)
        {
            singleton = [[Singleton alloc] init] ;
        }
}
        return singleton ;
}


方法二:
static Singleton *singleton = nil;

+(Singleton *)shareSingleton{
    
    // 当多个线程同时访问该资源的时候,能保护该资源在同一时刻只有一个线程访问.保证了单例对象的唯一性
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        if (singleton == nil) {
            singleton = [[Singleton alloc] init];
        }
    });
    return singleton;
}
隐藏状态栏 修改状态栏风格
-(UIStatusBarStyle)preferredStatusBarStyle 
{ 
    return UIStatusBarStyleLightContent;  // 暗背景色时使用
} 

- (BOOL)prefersStatusBarHidden 
{ 
    return YES; // 是否隐藏状态栏
}
UITableViewCell可移动,需要打开的代理方法以及移动过程中调用的代理方法
// tableView可移动  移动完成之后会调用此代理方法
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{

}

// 移动过程中调用的代理方法 -- 示例为不能跨区移动
/**
 *  <#Description#>
 *
 *  @param tableView
 *  @param sourceIndexPath              所要移动单元格的原始位置
 *  @param proposedDestinationIndexPath 将要移动到的位置
 *
 *  @return return value description
 */
- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath
{
    // 移动位置在同一分区
    if (sourceIndexPath.section == proposedDestinationIndexPath.section)
    {
        // 这时允许单元格移动
        return proposedDestinationIndexPath ;
    }
    // 不在同一分区 不让单元格移动,返回原始的indexPath
    else
    {
        return sourceIndexPath ;
    }
}
UIImage与字符串互转
//图片转字符串  
-(NSString *)UIImageToBase64Str:(UIImage *) image  
{  
    NSData *data = UIImageJPEGRepresentation(image, 1.0f);  
    NSString *encodedImageStr = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];  
    return encodedImageStr;  
}

//字符串转图片  
-(UIImage *)Base64StrToUIImage:(NSString *)_encodedImageStr  
{  
    NSData *_decodedImageData   = [[NSData alloc] initWithBase64Encoding:_encodedImageStr];  
    UIImage *_decodedImage      = [UIImage imageWithData:_decodedImageData];  
    return _decodedImage;  
}
当有多个导航控制器时,一次设置多个导航控制器
    UINavigationBar *navBar = [UINavigationBar appearance] ;
    // 所有导航条颜色都会改变 -- 一键设置
    //navBar.barTintColor = [UIColor yellowColor] ;
    [navBar setBackgroundImage:[UIImage imageNamed:@"bg_nav.png"] forBarMetrics:UIBarMetricsDefault] ;
通过2D仿射函数实现小的动画效果(变大缩小) --可用于自定义pageControl中.
       [UIView animateWithDuration:0.3 animations:^{
       imageView.transform = CGAffineTransformMakeScale(2, 2);
       } completion:^(BOOL finished) {
       imageView.transform = CGAffineTransformMakeScale(1.0, 1.0);
       }];
// 处理标签字符串中的空格,换行,/t(制表符)等
- (NSString *)replaceStringWithString :(NSMutableString *)string
{
    NSString *string1 = [string stringByReplacingOccurrencesOfString:@"\n" withString:@""] ;
    NSString *string2 = [string1 stringByReplacingOccurrencesOfString:@" " withString:@""] ;
    NSString *string3 = [string2 stringByReplacingOccurrencesOfString:@"\r" withString:@""] ;
    NSString *string4 = [string3 stringByReplacingOccurrencesOfString:@"\t" withString:@""] ;
    return string4 ;
}
UITextField的字数限制 //www.greatytc.com/p/2d1c06f2dfa4
// viewDidLoad中
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textFiledEditChanged:) 
          name:@"UITextFieldTextDidChangeNotification" object:myTextField];
-(void)textFiledEditChanged:(NSNotification *)obj
{
    UITextField *textField = (UITextField *)obj.object;
    NSString *toBeString = textField.text;

    //获取高亮部分
    UITextRange *selectedRange = [textField markedTextRange];
    UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];

    // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
    if (!position)
    {
        if (toBeString.length > MAX_STARWORDS_LENGTH)
        {
            NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:MAX_STARWORDS_LENGTH];
            if (rangeIndex.length == 1)
            {
                textField.text = [toBeString substringToIndex:MAX_STARWORDS_LENGTH];
            }
            else
            {
                NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, MAX_STARWORDS_LENGTH)];
                textField.text = [toBeString substringWithRange:rangeRange];
            }
        }
    }
 }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容