iOS_開發中遇到的那些問題_1

【自編號:60】【AutoLayout中,如何讓ImageView保持固定的寬高比?例如1:1】
先將imageViewframe手動寫成:寬20,高20,再勾選Aspect Ratio添加寬高比約束
【查看原文】 【2015-03-23 11:29:04 by beyond】




【自編號:61】【Cell中,先執行這個- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier,再執行這個-(void)awakeFromNib;】【2015-03-23 11:40:01 by beyond】




【自編號:71】【判斷tableView滾動到了最後一行】
self.tableView.contentSize.height =contentOffset+bounds.size.height
【2015-03-23 15:27:43 by beyond】




【自編號:78】【錯誤installAppearanceSwizzlesForSetter】
緣由是:[[UINavigationBar appearance] setTranslucent:NO]在iOS8中才有, 解決辦法:#define IOS8 [[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0 if(IOS8 && [UINavigationBar conformsToProtocol:@protocol(UIAppearanceContainer)]) { [[UINavigationBar appearance] setTranslucent:NO]; }
【2015-03-23 17:14:57 by beyond】




【自編號:79】【Unable to determine simulator device to boot】
緣由:XCode不知道選擇哪個模擬器去運行app. 解決方法:退出全部XCode和模擬器,若還不行,就重啓mac
【2015-03-23 17:24:04 by beyond】




【自編號:80】【打開模擬器】
XCode-->Open Developer Tool-->Simulator
【2015-03-23 17:24:48 by beyond】




【自編號:160】【自動定位:No. 3-1 Xianing Alley, No. 3-1 Xianing Alley, Wen'er Road Xixi Residential District, Xihu Hangzhou, Zhejiang China @ <+30.28138170,+120.14211600> +/- 100.00m, region (identifier <+30.28138150,+120.14211600> radius 49.29) <+30.28138150,+120.14211600> radius 49.29m】【2015-03-24 09:46:15 by beyond】




【自編號:161】【自動定位:中國浙江省杭州市西湖區西溪街道文二路下寧巷3-1號, 中國浙江省杭州市西湖區西溪街道文二路下寧巷3-1號 @ <+30.28138170,+120.14211600> +/- 100.00m, region (identifier <+30.28138150,+120.14211600> radius 49.29) <+30.28138150,+120.14211600> radius 49.29m】【2015-03-24 09:49:49 by beyond】




【自編號:162】【UserDefault寫入的目錄是:/var/mobile/Applications/Library/Preferences/com.beyond.testUserD.plist】【2015-03-24 10:15:15 by beyond】




【自編號:165】【UILabel顯示:標題。。。張數,設置NSLineBreakByTruncatingMiddle便可】【2015-03-24 15:43:37 by beyond】




【自編號:179】【URL Schemes打開app】 【進入網址】 【2015-03-25 11:59:52 by beyond】




【自編號:180】【URL Schemes打開app】 【進入網址】 【2015-03-25 12:02:43 by beyond】




【自編號:184】【SDWebImage默認會永久緩存一張圖片】
但若是同一個url下的圖片是變化的,那暫時想到的是用內存緩存,[imgView sd_setImageWithURL:url placeholderImage:imgPlace options:SDWebImageCacheMemoryOnly];
【2015-03-25 15:14:35 by beyond】




【自編號:186】【判斷包含字符串NSRange】
NSRange range = [requestURLStr rangeOfString:@"sg31.com"];
if (range.length > 0) {
}
或者
if(range.location !=NSNotFound){
}
【2015-03-25 16:41:50 by beyond】




【自編號:195】【正則NSPredicate檢查中文】
// 檢查漢字,YES表明全是漢字
- (BOOL)isHanziCheck:(NSString *)str
{
    //    NSString *regex = @"[a-zA-Z\u4e00-\u9fa5][a-zA-Z0-9\u4e00-\u9fa5]+";
    NSString *regex = @"[\u4e00-\u9fa5]{2,8}";
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    if(![pred evaluateWithObject: str]){
        /*
         //此動畫爲在頂上顯示文字
         [MPNotificationView notifyWithText:@"暱稱只能由中文、字母或數字組成"
         andDuration:0.5];
         */
        return NO;
    }
    return YES;
}
【2015-03-27 10:14:24 by beyond】




【自編號:196】【沒法在真機運行,XCode提示ineligible device】
解決辦法:在targets---->build settings---->iOS Deployment Target選擇iOS6.1或者更低的版本
【2015-03-30 09:36:17 by beyond】




【自編號:197】【CardI掃描卡沒有反應】
 card.io only scans 5 card types (MasterCard, Visa, Discover, American Express, JCB),後面是stackoverflow的解答
【進入網址】 【查看原文】 【2015-03-30 11:34:15 by beyond】




【自編號:198】【pod install報錯 版本不兼容】
VKVideoPlayerTests` (iOS 5.0) is not compatible with `Expecta (0.3.2)` which,解決方法:將項目deployment改高一點如:6.1便可
【2015-03-30 11:35:52 by beyond】




【自編號:199】【第3方_VKPlayer播放器】 【進入網址】 【2015-03-30 11:42:41 by beyond】




【自編號:201】【Not a git repository】
fatal: Not a git repository (or any of the parent directories): .git
解決辦法:git init 便可
【2015-03-30 11:58:48 by beyond】




【自編號:202】【OCR圖像識別】
能夠實現相似taobao客戶端掃描銀行卡號的功能
【查看原文】 【2015-03-30 14:49:13 by beyond】




【自編號:208】【往模擬器裏添加照片的最簡單的方法:直接把照片拖到模擬器上就能夠了】【2015-03-31 13:44:57 by beyond】




【自編號:209】【特效濾鏡】 【點擊下載】 【2015-03-31 13:46:07 by beyond】




【自編號:210】【DLog】
#ifdef DEBUG
#define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#define DLog(...)
#endif
【2015-03-31 18:55:00 by beyond】




【自編號:211】【如何設置appIcon】
點擊targets--->general--->use asset catalog
【查看原文】 【2015-04-01 14:53:43 by beyond】




【自編號:214】【MJRefresh的github】 【點擊下載】 【2015-04-01 17:31:26 by beyond】




【自編號:216】【scrollView滾動方向】
向上拉時,contentOffset.y爲正
向下拉時,contentOffset.y爲負
滾動判斷用到的變量:
typedef void (^ScrollBlock)(void);
// 向上滾動時的block
@property (nonatomic,strong) ScrollBlock scrollUpBlock;
// 向下滾動時的block
@property (nonatomic,strong) ScrollBlock scrollDownBlock;
// 滾動判斷
    CGFloat startY;
    BOOL isNowUp;
    BOOL isDown;
    BOOL isUserDrag;
#pragma mark - 滾動,新增,顯示,隱藏
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    // 開始時,標記置真
    isUserDrag = YES;
    // 記錄一下開始滾動的offsetY
    startY = scrollView.contentOffset.y;
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    // 結束時,置flag還原
    isUserDrag = NO;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    // 只有用戶drag時,才進行響應
    if(isUserDrag){
        // 實時
        // 判斷一下,併發出通知
        CGFloat newY = scrollView.contentOffset.y;
        if(startY - newY >0){
            // 說明向上滾動
            if(!isNowUp){
                //經過block告訴外部控制器
                if(_scrollUpBlock){
                    _scrollUpBlock();
                }
                isNowUp = YES;
                isDown = NO;
            }
        }else if(startY - newY<0){
            // 說明向下滾動
            if(!isDown){
                //經過block告訴外部控制器
                if(_scrollDownBlock){
                    _scrollDownBlock();
                }
                isDown = YES;
                isNowUp = NO;
            }
        }
        startY = scrollView.contentOffset.y;
    }
    
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    
    if (_scrollDownBlock && self.tableView.contentSize.height - (self.tableView.contentOffset.y+self.tableView.bounds.size.height) < 1) {
        _scrollDownBlock();
        return;
    }
    if(_scrollUpBlock){
        _scrollUpBlock();
        isNowUp = YES;
        isDown = NO;
        return;
    }
    
}
【2015-04-02 11:41:05 by beyond】




【自編號:217】【定義枚舉】
// 定義一個枚舉
typedef enum {
    // 返回按鈕
    FootViewBtnTypeBack,
    // 個人
    FootViewBtnTypeMine,
    // 寫評論
    FootViewBtnTypeWriteComment,
    // 查看評論
    FootViewBtnTypeReadComment,
    // 關注、取消關注
    FootViewBtnTypeAttention,
    // 更多按鈕
    FootViewBtnTypeMore
    
} FootViewBtnType;
【2015-04-02 14:57:34 by beyond】




【自編號:218】【變量名和類型相同時的異常錯誤】
FilterCtrl *FilterCtrl = [[FilterCtrl alloc]init];
這樣命名變量,會報錯,提示:沒有聲明alloc方法。。。。
【2015-04-02 15:04:13 by beyond】




【自編號:222】【IOS7新特性之XCODE】 【進入網址】 【2015-04-03 10:55:31 by beyond】




【自編號:223】【第3方集成支付】 【進入網址】 【2015-04-03 10:56:07 by beyond】




【自編號:224】【popping動畫演示】 【進入網址】 【2015-04-03 10:56:28 by beyond】




【自編號:226】【實時得到webView的contentSize】
 iOS 如何計算UIWebView的ContentSize
分類: iPhone常見問題 2014-02-27 17:33 1754人閱讀 評論(0) 收藏 舉報
首選要等UIWebView加載內容後,而後在它的回調方法裏將webview的高度Height設置足夠小,就設置爲1吧,由於這樣才能用
sizeThatFits才能計算出webview得內容大小
- (void)webViewDidFinishLoad:(UIWebView *)aWebView {
    CGRect frame = aWebView.frame;
    frame.size.height = 1;
    aWebView.frame = frame;
    CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero];
    frame.size = fittingSize;
    aWebView.frame = frame;

    NSLog(@"size: %f, %f", fittingSize.width, fittingSize.height);
}

UIWebView計算高度 (2013-10-09 14:48:39)轉載▼
標籤: uiwebview 高度 計算 sizethatfits	分類: ios
第一種:
- (void)webViewDidFinishLoad:(UIWebView *)webView{
    float height = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight;"] floatValue];
     //document.body.scrollHeight
}

第二種:

- (void) webViewDidFinishLoad:(UIWebView *)webView
{
    CGRect frame = webView.frame;
    CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
    frame.size = fittingSize;
    webView.frame = frame;
}

另一種
- (void)viewDidLoad {
    [super viewDidLoad];
    webview.delegate = self;
    [webview loadHTMLString:@"
fdasfda
" baseURL:nil];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSString *output = [webview stringByEvaluatingJavaScriptFromString:@"document.getElementByIdx_x_x_x("foo").offsetHeight;"];
    NSLog(@"height: %@", output);
}


【2015-04-03 15:46:30 by beyond】




【自編號:227】【ios_數組中放枚舉】
NSInteger   _btnTagArr[4] = {ContactSelectBtnChatting,ContactSelectBtnTel,isTeacher?ContactSelectBtnLeave:ContactSelectBtnDetail};
【2015-04-03 17:01:13 by beyond】




【自編號:246】【this class is not key value coding-compliant for the key HeightConstraint】
問題:
this class is not key value coding-compliant for the key HeightConstraint
緣由:
在IB上拖線時的時候,有多的 ,刪除掉便可
解答:
【2015-04-07 11:14:44 by beyond】




【自編號:247】【dispatch_after延時改變約束】
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        //    當事件觸發時,改變其constant值,而後調用約束所在的對象的 layoutIfNeeded方法,固定的~ 例如:
        _topView.collectionViewHeightConstraint.constant = 50;
        //    self.leftMarginConstraint.constant = 100;
        //    self.widthConstraint.constant = 200;
        [UIView animateWithDuration:2.0 animations:^{
            [self.view layoutIfNeeded];
            [_topView layoutIfNeeded];
        }];
    });
【2015-04-07 11:23:03 by beyond】




【自編號:253】【ios_VLC】 【查看原文】 【2015-04-08 17:04:16 by beyond】




【自編號:254】【ios_VLC】
VLC for iOS 2.3.0   

關於VLC配置問題,根據我的經驗整理了一下,但願能幫到須要的朋友。


官網連接:https://wiki.videolan.org/IOSCompile/

百度雲盤連接:http://pan.baidu.com/s/1bnEOXPH 密碼:ur4l


配置說明(百度雲盤)


官網按照說明操做就能夠了只是下載的地址是個谷歌的什麼網站,因此你懂得。


百度雲盤下載下來後須要配置下文件VLC/ios/External 這個文件夾下面有六個文件(快捷方式):MediaLibraryKit,MobileVLCKit,PLCrashReporter,QuincyKit,gtl,upnpx
從新配置下這六個文件路徑就能夠用了,vlc源碼是區分真機和模擬器的


終端配置路徑
一、在終端進入External文件夾
二、ln -s -f是終端修改文件路徑的,關於終端命令不懂的朋友請百度,在此就不班門弄斧了。
真機就用Release-iphoneos,模擬器就用Release-iphonesimulator


ln -s -f /Users/stlink/Desktop/VLC/ios/ImportedSources/MediaLibraryKit/build/Release-iphoneos MediaLibraryKit 


ln -s -f /Users/stlink/Desktop/VLC/ios/ImportedSources/VLCKit/build/Release-iphoneos MobileVLCKit


ln -s -f /Users/stlink/Desktop/VLC/ios/ImportedSources/PLCrashReporter/build/Release-iphoneos PLCrashReporter 


ln -s -f /Users/stlink/Desktop/VLC/ios/ImportedSources/QuincyKit/client/iOS/QuincyLib/build/Release-iphoneos QuincyKit 


ln -s -f /Users/stlink/Desktop/VLC/ios/ImportedSources/GDrive/build/Release-iphoneos gtl 


ln -s -f /Users/stlink/Desktop/VLC/ios/ImportedSources/upnpx/projects/xcode4/upnpx/build/Release-iphoneos upnpx



三、路徑正確的話就沒問題了,ls -l 查看文件路徑


修改完成後就能夠啓動了VLC/iOS/VLC for iOS.xcodeproj


注意:我有時候配置正確路徑可是文件仍是報錯,這種狀況的話解壓從新搞吧,暫時不知道怎麼處理。


SimplePlayback
這個是VLC在線播放的一個demo,路徑:VLC/ios/ImportedSources/VLCKit/Examples_iOS/SimplePlayback


項目直接拷貝出來不能用的,要配置下。
libMobileVLCKit.a 這個demo用到這個靜態庫。靜態庫區分真機和模擬器的。靜態庫我不太懂怎麼配置,搞了幾回沒搞定


不過有另外的辦法MobileVLCKit.framework這個不區分真機和模擬器的。
路徑:VLC/ios/ImportedSources/VLCKit/build


注意:Deployment target 要低於7.0


END


最後但願能幫到須要的朋友,不懂得能夠聯繫我,qq:527993842,加好友請說明謝謝,因爲工做緣由可能沒法及時回覆請見諒,並且我也是剛接觸vlc。



關鍵詞:iOS VLC

MediaLibraryKit項目中的Search paths使用相對路徑就能夠了。

Header Search Paths -->  ../../External/MobileVLCKit/include
Library Search Paths --> ../../External/MobileVLCKit

MediaLibraryKit項目中相對路徑$(SRCROOT)獲得的值是/XXX/XXX/VLC/ios/ImportedSources/MediaLibraryKit,而不是想象中的/XXX/XXX/VLC/ios/

多謝LZ的奉獻~~~ 
【查看原文】 【2015-04-08 17:05:30 by beyond】




【自編號:255】【導航返回按鈕】
UIButton* btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, image.size.width+10, 40)];
    btn.showsTouchWhenHighlighted = YES;
    [btn setImage:image forState:UIControlStateNormal];
    [btn addTarget:theTarget action:sel forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *backBtn = [[UIBarButtonItem alloc] initWithCustomView:btn];
    backBtn.tag = 9528;
    
    vc.navigationItem.leftBarButtonItem = backBtn;
【2015-04-08 17:29:42 by beyond】




【自編號:256】【iphone真機死活不旋轉】
死活不走代理方法:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{
    return (interfaceOrientation == UIInterfaceOrientationPortrait
            || interfaceOrientation == UIInterfaceOrientationLandscapeLeft
            || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

緣由多是:手機上拉快速設置欄中:豎排方向鎖定 :打開了
【2015-04-09 11:13:39 by beyond】




【自編號:257】【模擬器上面 播放視頻崩潰】
iphone 4s  8.0系統的模擬器上面 播放視頻:
崩潰:
Apr  9 11:44:39 [jun] rtcreporting[57158] : logging starts...
Apr  9 11:44:39 [jun] rtcreporting[57158] : setMessageLoggingBlock: called
緣由:
在模擬器上面播放視頻
解決辦法:
去掉全局斷點,這是一個bug
【2015-04-09 11:52:57 by beyond】




【自編號:258】【應該豎屏,僅在視頻播放頁面橫屏】
在app delegate中,啓動時,
    [userDefault setBool:NO forKey:@"userDefault_isAllowLandscape"];
    [userDefault synchronize];
在app delegate中,經過一個本地保存的key進行判斷,是否進行橫屏
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    // 全局的設置:容許豎屏+橫屏
    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
    BOOL isAllowLandscape = [userDefault boolForKey:@"userDefault_isAllowLandscape"];
    if (isAllowLandscape) {
        return UIInterfaceOrientationMaskPortrait|UIInterfaceOrientationMaskLandscape;
    } else {
        return UIInterfaceOrientationMaskPortrait;
    }


}
在視頻播放控制器中,更改本地保存的key便可
【2015-04-09 14:40:52 by beyond】




【自編號:261】【ios_xib_preview預覽】
右上方----show the assistant edit ---- 選擇新窗口中manual最下方的Preview
【2015-04-10 09:51:28 by beyond】




【自編號:267】【inDatabase: was called reentrantly on the same queue, which would lead to a deadlock】
在使用時,若是在queue裏面的block執行過程當中,又調用了 indatabase方法,則會檢查 是否是同一個queue,若是是同一個queue會死鎖;緣由很簡單:
隊列裏面 放了一個block,該block又在 本隊列 後面放了一個 block;
從而:前一個block 裏面 調用了 後一個block,必須等後一個block執行完成了,
前一個block纔會 出隊列;
然後一個block想要執行,則又必須先等 前一個block出隊列;
所以 死鎖!!!!
解決方法:在indatabase的block中,不要再調用indatabase方法
[[[DBHelper shareInstance] dbQueue]inDatabase:^(FMDatabase *db){
                
                isSuccess = [self.helper update4Table:TB_User_Friend withArgs:args where:where];
                
}];
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- (void)inDatabase:(void (^)(FMDatabase *db))block {
    /* Get the currently executing queue (which should probably be nil, but in theory could be another DB queue
     * and then check it against self to make sure we're not about to deadlock. */
    FMDatabaseQueue *currentSyncQueue = (__bridge id)dispatch_get_specific(kDispatchQueueSpecificKey);
    assert(currentSyncQueue != self && "inDatabase: was called reentrantly on the same queue, which would lead to a deadlock");
}

【2015-04-16 10:49:41 by beyond】




【自編號:270】【自動佈局scrollView】
contentSize 必須明確指定,如label距離下方多少,距離右邊多少,這樣才能夠 讓scrollView計算出contentSize
【查看原文】 【2015-04-16 15:50:52 by beyond】




【自編號:271】【先對數組統一排序,再進行分組,再組內排序】
// 其餘狀況,返回是數組
        NSMutableArray *contentDictArr = (NSMutableArray *)content;
        DLog(@"返回是數組,長度是 %d",contentDictArr.count);
        //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        // NSArray 轉成 NSMutableArray
        // 0、對於不啓用的,即enabled爲0的字典模型,刪除掉
        NSMutableArray *dictArr = [NSMutableArray array];
        for (NSInteger i = 0; i < contentDictArr.count; i++) {
            NSDictionary *dict = contentDictArr[i];
            if ([[dict objectForKey:@"FEnabled"]intValue] == 1) {
                [dictArr addObject:dict];
            }
        }
        // DLog(@"清除未啓用的字典後的數組:%@",dictArr);
        // 0.一、對於被包含的模塊,暫時剔除
        NSMutableArray *tempdictArr = [NSMutableArray array];
        for (NSInteger i = 0; i < dictArr.count; i++) {
            NSDictionary *dict = dictArr[i];
            // 若是有值,則說明是某個模塊的子模塊@"26e86235-e04c-46e1-a7d5-6d513c02de39"
            // 若是沒有值,即NSNull,表示是根目錄模塊,直接展現
            if ([[dict objectForKey:@"FUpCMID"] class] == [NSNull class]) {
                [tempdictArr addObject:dict];
            }
        }
        
        // 一、對數組按GroupTag排序
        NSArray *sortDesc = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"FGroupTag" ascending:YES]];
        NSArray *sortedArr = [tempdictArr sortedArrayUsingDescriptors:sortDesc];
        // DLog(@"排序後的數組:%@",sortedArr);
        
        
        // 二、對數組進行分組,按GroupTag
        // 遍歷,建立組數組,組數組中的每個元素是一個模型數組
        NSMutableArray *testGroupArr = [NSMutableArray array];
        NSMutableArray *currentArr = [NSMutableArray array];
        // 由於確定有一個字典返回,先添加一個
        [currentArr addObject:sortedArr[0]];
        [testGroupArr addObject:currentArr];
        // 若是不止一個,纔要動畫添加
        if(sortedArr.count > 1){
            for (NSInteger i = 1; i < sortedArr.count; i++) {
                // 先取出組數組中  上一個模型數組的第一個字典模型的groupID
                NSMutableArray *preModelArr = [testGroupArr objectAtIndex:testGroupArr.count-1];
                NSInteger preGroupID = [[[preModelArr objectAtIndex:0] objectForKey:@"FGroupTag"] intValue];
                // 取出當前字典,根據groupID比較,若是相同則添加到同一個模型數組;若是不相同,說明不是同一個組的
                NSDictionary *currentDict = sortedArr[i];
                NSInteger groupID = [[currentDict objectForKey:@"FGroupTag"] intValue];
                if (groupID == preGroupID) {
                    [currentArr addObject:currentDict];
                }else{
                    // 若是不相同,說明 有新的一組,那麼建立一個模型數組,並添加到組數組testGroupArr
                    currentArr = [NSMutableArray array];
                    [currentArr addObject:currentDict];
                    [testGroupArr addObject:currentArr];
                }
            }
        }
        // 三、遍歷 對每一組 進行排序
        NSMutableArray *tempGroupArr = [NSMutableArray array];
        for (NSArray *arr in testGroupArr) {
            // NSArray *sortDesc = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"FOrder" ascending:YES]];
            NSArray *tempArr = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
                if([[obj1 objectForKey:@"FOrder"]intValue] < [[obj2 objectForKey:@"FOrder"]intValue]){
                    return NSOrderedAscending;
                }
                if([[obj1 objectForKey:@"FOrder"]intValue] > [[obj2 objectForKey:@"FOrder"]intValue]){
                    return NSOrderedDescending;
                }
                return NSOrderedSame;
            }];
            [tempGroupArr addObject:tempArr];
        }
        testGroupArr = tempGroupArr;
        DLog(@"封裝好的group數組:%@",testGroupArr);
        //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        // testGroupArr 將封裝好的字典數組緩存起來,以便下次調用 userDefault_localGroupArr
        // 根據用戶上次選擇的,展現
        NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
        [userDefault setBool:YES forKey:@"userDefault_hasCached_moduleDictArr"];
        NSString *jsonStr = testGroupArr.JSONString;
        DLog(@"沒有網絡的時候用:jsonStr:%@",jsonStr);
        [userDefault setObject:jsonStr forKey:@"testGroupArr_jsonStr"];
        [userDefault sync
【2015-04-17 11:39:14 by beyond】




【自編號:272】【awakeFromNib】
- (id)initWithFrame:(CGRect)frame  
{  
    self = [super initWithFrame:frame];  
    if (self) {  
        // Initialization code  
    }  
    return self;  
}  
  
- (void)awakeFromNib{  
    [super awakeFromNib];  
    NSLog(@"call %s", __FUNCTION__);  
    self.backgroundColor = [UIColor redColor];  
   // 其餘初始化方法
}  
【2015-04-17 13:44:36 by beyond】




【自編號:273】【iOS開發的一些奇巧淫技】 【查看原文】 【2015-04-17 13:45:06 by beyond】




【自編號:274】【nsrange,是 一個結構體,方法: NSMakeRange(<#NSUInteger loc#>, <#NSUInteger len#>)】【2015-04-17 15:36:04 by beyond】




【自編號:279】【textView佔位】
Easy way, just create placeholder text in UITextView by using the following UITextViewDelegate methods:

- (void)textViewDidBeginEditing:(UITextView *)textView
{
    if ([textView.text isEqualToString:@"placeholder text here..."]) {
         textView.text = @"";
         textView.textColor = [UIColor blackColor]; //optional
    }
    [textView becomeFirstResponder];
}

- (void)textViewDidEndEditing:(UITextView *)textView
{
    if ([textView.text isEqualToString:@""]) {
        textView.text = @"placeholder text here...";
        textView.textColor = [UIColor lightGrayColor]; //optional
    }
    [textView resignFirstResponder];
}
just remember to set myUITextView with the exact text on creation e.g.

UITextView *myUITextView = [[UITextView alloc] init];
myUITextView.delegate = self;
myUITextView.text = @"placeholder text here...";
myUITextView.textColor = [UIColor lightGrayColor]; //optional
and make the parent class a UITextViewDelegate before including these methods e.g.

@interface MyClass () 
@end
【進入網址】 【2015-04-20 10:30:15 by beyond】




【自編號:281】【btn獲得cell獲得table獲得row】
while (![btn isMemberOfClass:[self class]]){
        btn = (UIButton *)[btn superview];
    }
    MyProjectCell *cell = (MyProjectCell *)btn;
    UITableView *tableView = (UITableView *)cell;
    while (![tableView isMemberOfClass:[UITableView class]]){
        tableView = (UITableView *)[tableView superview];
    }
    NSIndexPath *path = [tableView indexPathForCell:cell];
    row = path.row;
    // 已經棄用,調用外界的控制器的block,並將cell的行號傳遞過去
    // _wannaChangeStatusBlock(row);
    
    // 調用外界的控制器的block,並將cell的行號傳遞過去
    _wannaChangeStatusBlockExt(row,cell);
【2015-04-21 15:31:01 by beyond】




【自編號:282】【auto adjust cell】
viewdidload
    tableView.rowHeight = UITableViewAutomaticDimension;
    tableView.estimatedRowHeight = 10;
cellForRow
    [cell layoutIfNeeded];
【2015-04-21 15:37:29 by beyond】




【自編號:283】【iOS開發的一些奇巧淫技】 【進入網址】 【2015-04-22 16:46:25 by beyond】




【自編號:284】【url schemes】
工程--->targets--->info--->urlTypes
identifier:  com.sg31.www
url schemes: beyond
下面的爲接收到外部調用的時候程序啓動,響應方法,在safari輸入:beyond://com.sg31.www
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {  
      
    if ([[url scheme] isEqualToString:@"beyond"]) {  
        NSLog(@"外部調用成功");  
    }  
    return YES;  
}   
【2015-04-23 09:58:25 by beyond】




【自編號:285】【動畫特效1】
CAKeyframeAnimation * animation;
    animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
    animation.duration = 0.5;
    animation.delegate = self;
    animation.removedOnCompletion = YES;
    animation.fillMode = kCAFillModeForwards;
    
    NSMutableArray *values = [NSMutableArray array];
    [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)]];
    [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.2, 1.2, 1.0)]];
    [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.9, 0.9, 0.9)]];
    [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 1.0)]];
    
    animation.values = values;
    [_contentView.layer addAnimation:animation forKey:nil];
【2015-04-23 17:22:19 by beyond】
相關文章
相關標籤/搜索