[經驗]iOS開發-記錄下在開發過程當中遇到的問題的解決方案及經驗總結-2

前言:最近一直忙於項目,總結都直接順手放在了筆記裏,文章疏於打理遲遲沒有更新,在這裏跟各位說句對不起。本來打算上一篇記錄到400條的時候再新開一篇,可是更新的時候一直出現崩潰的情況,索性就直接轉到這裏了。git

第二彈開始!(因爲拖欠的內容較多,一次性補起來比較費勁,因此暫時每次更新30個)

1.關於在NSobject類中沒法聲明UImageView *等參數
Framwork要加入UIKit框架,UIImage才能使用json

2.打包時選擇了表述文件後
只會顯示對應的一個證書,只要有多個證書就重啓一遍xcodexcode

3.白色字體由於背景圖片而看不清如何處理
在背景圖片上蒙一層半透明的UIImageView便可框架

4.bounce能夠控制scrollview的反彈效果
爲BOOL型變量,可設置iphone

5.在響應事件內切換tabBar編輯器

self.tabBarController.selectedIndex = 1;

6.git 快速找到clone地址ide

git remote -v

7.打包時出現 3D0CC99EBF87D6479CF799461890E07C85685769: no identity found Command /usr/bin/codesign failed with exit code 1 錯誤
相似錯誤是證書不對,沒運行證書測試

8.iOS報錯[__NSCFNumber length]: unrecognized selector sent to instance
出現這種報錯很大的緣由是由於類型給錯了,或許你這個數據是從json上解析後獲得的,可是須要看一下這個數據是NSString仍是NSNumber類型,若是是NSNumber類型的話,你又直接使用NSString類型的變量去接收他,那麼確定會報這樣的錯誤,因此必定要注意數據的類型字體

9.設置鍵盤右下角按鈕的類型,如:完成ui

self.searchTextField.returnKeyType = UIReturnKeyDone;

10.當代碼建立tableIView後註冊的cell爲nil時的緣由
1.該tableView被隱藏,查看hidden屬性是否爲YES
2.是否同一界面存在多個tableView,是的話在須要判斷的地方以下處理:
tableView = tableViewA;
tableView = tableViewB;

11.UIButton的UIControlEventTouchUpInside無響應問題
查看其父控件是否繼承了某些類,或直接從父控件中轉移到平級便可解決

12.在實現錄音長按等效果時,UIButton不須要加長按手勢
使用UIControlEventTouchDown(點下去) 這個按下去的操做來判斷
監聽擡手動做時用UIControlEventTouchUpInside(點下去彈起來)來判斷便可

13.長按手勢的開始和結束

-(void)longPress:(UILongPressGestureRecognizer *)gestureRecognizer
{
    //長按開始
    if ([gestureRecognizer state] == UIGestureRecognizerStateBegan) {
        [self.voiceSignView.voiceButton setBackgroundImage:[UIImage imageNamed:@"bf1"] forState:UIControlStateNormal];
        self.voiceSignView.promptLabel.text = @"鬆手結束";
        self.voiceSignView.cancelButton.hidden = YES;
        self.voiceSignView.saveButton.hidden = YES;
        
        //長按結束
    } else if ([gestureRecognizer state] == UIGestureRecognizerStateEnded) {
        
    }
    
}

14.tableView返回頂部,一般使用在下拉刷新時

[self.tableView setContentOffset:CGPointMake(0, 0) animated:YES];

15.presentViewController過去以後navigation不見了或者push操做沒法響應
是由於presentViewController 須要使用的是navigationController的sb ID,換成navigationController的sb ID就能夠了。

16.真機測試出現Your build settings specify a provisioning profile with
1.找到項目中的**.xcodeproj文件,點擊右鍵,show package contents(打開包內容)。
2.打開後找到project.pbxproj文件,用文本編輯器打開。其實就是右鍵,點擊open就行了。
3.打開這個文件後,按command+F,在這個文件中查找「PROVISIONING_PROFILE",找到和這個「
PROVISIONING_PROFILE = "487F3EAC-05FB-4A2A-9EA0-31F1F35760EB"; "PROVISIONING_PROFILE[sdk=iphoneos*]" = "487F3EAC-05FB-4A2A-9EA0-31F1F35760EB";」相似的都刪除。
4.而後保存文件,從新打開項目。xcode會提示你從新下載安裝provisioning profile文件。下載後安裝上就能夠。

17.更改segmentControl圖片

UIImage * imageSel = [UIImage imageNamed:@"d_seg_sel"];
[self.segmentButton setBackgroundImage:[imageSel resizableImageWithCapInsets:UIEdgeInsetsMake(10, 10, 0, 10) resizingMode:UIImageResizingModeStretch] forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];

UIImage * imageNor = [UIImage imageNamed:@"d_seg_nor"];
[self.segmentButton setBackgroundImage:[imageNor resizableImageWithCapInsets:UIEdgeInsetsMake(10, 10, 0, 10) resizingMode:UIImageResizingModeStretch] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

18.隱藏UIScrollView的滾動條(一樣適用於父類繼承自UIScrollView的控件,如UITableView,UICollectionView等)

scrollView.showsVerticalScrollIndicator = FALSE;
scrollView.showsHorizontalScrollIndicator = FALSE;

19.關於segmentButton存在多個並排segment而展現不完的解決方法
1.將字體超過侷限的segment的Width進行調整便可
2.使用UICollectionView進行假裝

20.撤回登錄界面
present對應dismiss
push對應pop

例:
若是登錄是

UINavigationController * loginNavigationController = getViewController(@"login", @"Login");
    [[[[UIApplication sharedApplication]keyWindow]rootViewController] presentViewController:loginNavigationController animated:YES completion:^{
        XS_APP_DELEGATE.tabBarController = nil;
    }];

那麼取消登錄就是

[self.view endEditing:YES];
    [[[[UIApplication sharedApplication]keyWindow]rootViewController] dismissViewControllerAnimated:YES completion:^{
    
}];

21.計算日期,昨日-今日-以及以後的幾天日期

self.dataArray = [[NSMutableArray alloc] init];
NSDate * date = [NSDate date];
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM.dd"];
NSDate * yesterday = [NSDate dateWithTimeInterval:-24 * 60 * 60 sinceDate:date];
NSString * yesterdayString = [dateFormatter stringFromDate:yesterday];
[self.dataArray addObject:yesterdayString];
[self.dataArray addObject:@"今日"];
[self.dataArray addObject:@"明日"];
NSDate * after;
for (int i = 2; i < 6; i ++) {
    after = [NSDate dateWithTimeInterval:i * 24 * 60 * 60 sinceDate:date];
    NSString * afterString = [dateFormatter stringFromDate:after];
    [self.dataArray addObject:afterString];
}

22.設置UIButton的UIFont

cancelButton.titleLabel.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:14];

23.@property和@interface聲明變量的區別
用@interface聲明的屬性,只能在這個父類中使用,是徹底私有的,用@property聲明的屬性外部是能夠訪問的,同時,用@property聲明的對象系統會給予一個get和set的方法屬性,這個是管理內存一個重要的方式 在oc裏面,也能夠說,用@property可使用self,能夠進行重寫的操做,而@interface不能夠

24.返回到指定viewController

NSArray * vcArray = self.navigationController.viewControllers;
for (UIViewController * vc in vcArray) {        
        if ([vc isKindOfClass:[XSConfiderSettingTableViewController class]]) {            
                [self.navigationController popToViewController:vc animated:YES];       
    }    
}

也能夠:

[self.navigationController popToViewController:[vcArray objectAtIndex:index] animated:YES];

其中index能夠根據實際狀況而定,返回指定第幾個viewController

25.若是判斷不了arrray[n]是否存在,就判斷array.count > n

26.自定義section的文字顏色背景等

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView * sectionView = [[UIView alloc] init];
    sectionView.backgroundColor = [UIColor colorWithRed:242/255.0 green:243/255.0 blue:248/255.0 alpha:1.0];
    UILabel * titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(16, 0, 190, 30)];
    [titleLabel setFont:[UIFont systemFontOfSize:14]];
    titleLabel.textColor = kColor;
    titleLabel.text = @"選擇開通的套餐服務";
    [sectionView addSubview:titleLabel];
    
    return sectionView;
}

27.UISwitch的顏色樣式無需自定義重寫
直接在其ON Tint屬性中設置就好了,固然還有Thumb Tint屬性

28.畫遠離字體的UILabel邊框的取巧方法
在內容的兩側加上空格便可撐開邊框,如:

NSString * info = @"內容";
self.label = [NSString stringWithFormat:@" %@ ", info];

29.一個統一設置label邊框的方法(當該類存在多個UILabel控件須要畫上邊框時)

//統一設置label邊框
-(void)changeLabelBorder:(UILabel *)label borderColor:(UIColor *)color
{
    label.layer.masksToBounds = YES;
    label.layer.cornerRadius = 7;//圓角
    label.layer.borderColor = color.CGColor;//邊框顏色
    label.layer.borderWidth = 0.5;//邊框寬度
    label.textColor = color;//字體顏色
}

30.靜態UITableView的cell箭頭設置方法 在storyBoard中選中tableView選擇Accessory ->Disclosure Indicator

相關文章
相關標籤/搜索