1:iOS 使用NJKWebViewProgress做webview進度條 2:解決輸入框UITextField關於拼音或部首被當作內容響應 這裡主要使用了兩個知識: 輸入法輸入時,拼音字母或者筆畫處於選中狀態,可以使用 markedTextRange 獲取到 普通輸入,以及將輸入法的待選字填入輸入 ...
1:iOS 使用NJKWebViewProgress做webview進度條
引入頭文件: #import "NJKWebViewProgressView.h" #import "NJKWebViewProgress.h"
遵守協議 <UIWebViewDelegate, NJKWebViewProgressDelegate> 實現代碼 @implementation ViewController { IBOutlet __weak UIWebView *_webView; NJKWebViewProgressView *_webViewProgressView; NJKWebViewProgress *_webViewProgress; } - (void)viewDidLoad { [super viewDidLoad]; _webViewProgress = [[NJKWebViewProgress alloc] init]; _webView.delegate = _webViewProgress; _webViewProgress.webViewProxyDelegate = self; _webViewProgress.progressDelegate = self; CGRect navBounds = self.navigationController.navigationBar.bounds; CGRect barFrame = CGRectMake(0, navBounds.size.height - 2, navBounds.size.width, 2); _webViewProgressView = [[NJKWebViewProgressView alloc] initWithFrame:barFrame]; _webViewProgressView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin; [_webViewProgressView setProgress:0 animated:YES]; [self loadBaidu]; [self.navigationController.navigationBar addSubview:_webViewProgressView]; } -(void)loadBidu { NSURLRequest *req = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.baidu.com/"]]; [_webView loadRequest:req]; } #pragma mark - NJKWebViewProgressDelegate -(void)webViewProgress:(NJKWebViewProgress *)webViewProgress updateProgress:(float)progress { [_webViewProgressView setProgress:progress animated:YES]; self.title = [_webView stringByEvaluatingJavaScriptFromString:@"document.title"]; }
2:解決輸入框UITextField關於拼音或部首被當作內容響應
// 添加監聽 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidChanged:) name:UITextFieldTextDidChangeNotification object:self.textField]; // 監聽處理 - (void)textFieldDidChanged:(NSNotification *)notification { NSString *text = self.textField.text; // 拼音輸入時,拼音字母處於選中狀態,此時不判斷是否超長 UITextRange *selectedRange = [self.textField markedTextRange]; if (!selectedRange || !selectedRange.start) { if (text.length > MAXLENGTH) { self.textField.text = [text substringToIndex:MAXLENGTH]; } } }
這裡主要使用了兩個知識:
- 輸入法輸入時,拼音字母或者筆畫處於選中狀態,可以使用 markedTextRange 獲取到
- 普通輸入,以及將輸入法的待選字填入輸入框時,都會發出 UITextFieldTextDidChangeNotification, 可以監聽這個通知,並事後對 UITextField 的內容做清理
另外除了使用監聽 NSNotification 的方式,也可以使用 addTargetAction 的方式,代碼如下:
[self.textField addTarget:self
action:@selector(textChange:)
forControlEvents:UIControlEventEditingChanged];
這與上面的方式是等價的,但是使用 NSNotification 需要在對象銷毀時 removeObserver,而這種方式不需要
3:根據內容自適應UIButton的大小
NSString *str = @"這是按鈕的標題"; UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; btn.titleLabel.font = [UIFont systemFontOfSize:13.0]; //對按鈕的外形做了設定,不喜可刪~ btn.layer.masksToBounds = YES; btn.layer.borderWidth = 1; btn.layer.borderColor = [[UIColor blackColor] CGColor]; btn.layer.cornerRadius = 3; [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [btn setTitle:str forState:UIControlStateNormal]; //重要的是下麵這部分哦! CGSize titleSize = [str sizeWithAttributes:@{NSFontAttributeName: [UIFont fontWithName:btn.titleLabel.font.fontName size:btn.titleLabel.font.pointSize]}]; titleSize.height = 20; titleSize.width += 20; btn.frame = CGRectMake(100, 100, titleSize.width, titleSize.height); [view addSubview:btn];
4:解決部分文字樣式不同的方法
NSRange range = [title rangeOfString:targetname]; NSMutableAttributedString *mutableTitle = [[NSMutableAttributedString alloc] initWithString:title]; [mutableTitle addAttribute:NSForegroundColorAttributeName value:COLOR_WORD_GRAY_2 range:NSMakeRange(0, title.length)]; if (range.length>0) { [mutableTitle addAttribute:NSForegroundColorAttributeName value:HEXCOLOR(0xf7ab00) range:range]; NSInteger startIndex = range.location+range.length; [mutableTitle addAttribute:NSForegroundColorAttributeName value:COLOR_WORD_GRAY_2 range:NSMakeRange(startIndex, title.length-startIndex)]; [mutableTitle addAttribute:NSFontAttributeName value:CHINESE_SYSTEM(16) range:NSMakeRange(0, title.length)]; } self.titleLabel.attributedText=mutableTitle;