1. 程式人生 > >ios中常用的小技巧大全(總有你不知道的和你會用到的)

ios中常用的小技巧大全(總有你不知道的和你會用到的)

/*1*/ tempString = [tempString stringByReplacingOccurrencesOfString:@" " withString:@""];
/*2 */tempString = [tempString stringByReplacingOccurrencesOfString:@"#" withString:@""];
/*3*/ tempString = [tempString stringByReplacingOccurrencesOfString:@"*" withString:@""];
/*4*/ tempString = [tempString stringByReplacingOccurrencesOfString:@"+" withString:@""];
/*5*/ tempString = [tempString stringByReplacingOccurrencesOfString:@"-" withString:@""];

這樣做比較煩的一個問題就是,如果要過濾掉的非法字元有很多的話,就得寫多行這種替代程式碼。

另外一種方法比較巧妙,先將字串按非法字符集進行截斷最後再拼接起來。程式碼看起來很簡直,直接了斷。

/*1*/ NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"[]{}(#%-*+=_)\\|~(<>$%^&*)_+ "];
/*2*/ tempString = [[tempString componentsSeparatedByCharactersInSet: doNotWant]componentsJoinedByString: @""];

doNotWant這個字符集裡想寫幾個就寫幾個。

另外不能用stringByTrimmingCharactersInSet這個方法進行過濾,它能做到的僅僅是把字串兩端的非法字元過濾,但是包含在字串裡非法字元則無能為力。


十三、點選系統的返回按鈕,返回到指定檢視

舉個栗子:我們在開發中,有時會遇到這樣的情況,有A、B、C三個檢視控制器,A中有一個按鈕,點選按鈕push到B控制器,B中有個按鈕,點選push到C控制器,如果點選C左上角系統自帶的返回按鈕,會預設的執行下面的程式碼:

- (nullable UIViewController *)popViewControllerAnimated
:(BOOL)animated
;

返回到上一個頁面B,當然我們可以通過自定義左上角的返回按鈕,通過系統的方法:

- (nullable NSArray<__kindof UIViewController *> *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;

返回到我們指定的檢視控制器,但是此時會有一個問題,如果自定義了返回按鈕,可以返回到指定的頁面,但是如果通過右劃的手勢,此時頁面返回的還是上一級頁面,當然我們也可以通過給檢視重新新增手勢,在右劃的時候,也返回到指定的頁面,但是我覺得這樣就有點兒工作量了;我想要表達的意思就是:在不自定義返回按鈕的前提下,A->B->C,點選C上面的返回按鈕(或者通過右劃的手勢),返回到A頁面怎麼實現呢;

網找了很多終於找到一個好的方法:

在B push到C頁面之後,在C頁面中,把B從檢視控制器中刪除,此時的控制器中只有A和C了,點選C上面的返回按鈕,返回的就是A頁面;(哎,哎,別打...)程式碼如下,這是在C頁面中的程式碼:

- (void)viewDidLoad {
    [super viewDidLoad];

    //得到當前檢視控制器中的所有控制器
    NSMutableArray *array = [self.navigationController.viewControllers mutableCopy];
    //把B從裡面刪除
    [array removeObjectAtIndex:1];
    //把刪除後的控制器陣列再次賦值
    [self.navigationController setViewControllers:[array copy] animated:YES];
}

當然,如果有4個檢視控制器的話A/B/C/D,如果想用從D返回到到A,可以把B和C從裡面刪除了,具體思路根據具體業務分析;

十四、IOS storyboard解決TableViewCell底線無法到頭問題

加上下邊這兩段程式碼即可:
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    // 讓分割線從頭開始
    if ([_TableViewList respondsToSelector:@selector(setSeparatorInset:)]) {
        [_TableViewList setSeparatorInset:UIEdgeInsetsMake(0,0,0,0)];
    }
    
    if ([_TableViewList respondsToSelector:@selector(setLayoutMargins:)]) {
        [_TableViewList setLayoutMargins:UIEdgeInsetsMake(0,0,0,0)];
    }
}
// 讓分割線從頭開始
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
        [cell setSeparatorInset:UIEdgeInsetsZero];
    }
    
    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
        [cell setLayoutMargins:UIEdgeInsetsZero];
    }
}
或者在xib中這樣: 相信很多ios開發者都有遇到過這個坑,在設定tableview的時候想要將每個cell的底部線條長度和螢幕寬度一樣。
但是即使在storyboard的tableview上設定如下圖:
即使這樣在你執行除錯的時候每個cell的左邊也還是會有一小段空白。
這問題是不是讓你們很頭疼呢?


估計有人會說直接使用uiview來當線條就好了
首先,用view當線條我不反對,但是在特殊情況下是不是很繁瑣呢?你要在每個地方加這東西。。。


好了,直接進入問題吧。想要解決這個問題,其實很簡單。


首先在storyboard上選中你的cell,然後如下圖;