ios中常用的小技巧大全(總有你不知道的和你會用到的)
阿新 • • 發佈:2019-01-08
/*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,然後如下圖;