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的字數限制 http://www.lxweimin.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];
            }
        }
    }
 }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容