1.UITextField类
1.UITextField属性设置(容易错过的属性)
1.1 设置UITextfield光标颜色
self.textfiled.tintColor = ColorRGB(255, 171, 52);
1.2 设置UITextfield文本向右偏移
self.textfiled.leftView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 10, 0)];
self.textfiled.leftViewMode = UITextFieldViewModeAlways;
1.3 自定义UITextfield清除按钮
UIButton *cleanBtn = [self valueForKey:@"_clearButton"];
[cleanBtn setImage:[UIImage imageNamed:@"edit_delete"] forState:UIControlStateNormal];
2.监听UITextfield的输入,监听UITextfield的输入
2.1 使用监听,不设置代理
监听:
[self.textfiled addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
方法实现:
- (void)textFieldDidChange:(UITextField *)textField {
self.btn.enabled = textField.text.length==11;
}
2.2 需要设置代理,在代理方法中实现监听输入
- (void)textViewDidChange:(UITextView *)textView { // 在该代理方法中实现实时监听uitextview的输入
if (textView.text.length>10) {
[TipsTool showTipsOnView:self.view message:@"不能超过10"];
}
self.remindLab.text = [NSString stringWithFormat:@"%zd/10",textView.text.length];
self.navigationItem.rightBarButtonItem.enabled = textView.text.length>0 && textView.text.length<=300;
}
2.UIView类
2.1 设置UIView的指定圆角
> 导入\#import <CoreGraphics/CoreGraphics.h>
CGFloat radius = 20;
UIRectCorner corner = UIRectCornerTopRight|UIRectCornerTopLeft; // 右上右左举例
if (@available(iOS 11.0,*)) { // iOS11以上苹果提供了属性
cornerRadiusView.layer.cornerRadius = radius;
cornerRadiusView.layer.maskedCorners = (CACornerMask)corner;
}else{ // iOS11已下用UIBezierPath设置
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:cornerRadiusView.bounds byRoundingCorners:corner cornerRadii:CGSizeMake(radius, radius)];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc]init];
maskLayer.frame = cornerRadiusView.bounds;
maskLayer.path = path.CGPath;
cornerRadiusView.layer.mask = maskLayer;
}
3.UITableView类
3.1 tableview隐藏最后一行分割线
static void setLastCellSeperatorToLeft(UITableViewCell* cell)
{
if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
[cell setSeparatorInset:UIEdgeInsetsZero];
}
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
}
if([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]){
[cell setPreservesSuperviewLayoutMargins:NO];
}
}
4.UICollectionView类
4.1 控制collectionview头部随着cell滚动策略 但又让第二段头部悬浮置顶
if (scrollView.contentOffset.y>头部偏移量) {
self.layout.sectionHeadersPinToVisibleBounds = YES;
}else{
self.layout.sectionHeadersPinToVisibleBounds = NO;
}
5.UIButton类
5.1 按钮内部文字太长省略号在中间的问题
设置这个属性就可以和label一样显示在后面
checkBtn.titleLabel.lineBreakMode = NSLineBreakByTruncatingTail;
6.其他
6.1 n位数添加单位处理
#pragma mark - 把大长串的数字做单位处理
- (NSString *)changeAsset:(NSString *)amountStr{
if (amountStr && ![amountStr isEqualToString:@""]){
NSInteger num = [amountStr integerValue];
if (num<10000) {
return amountStr;
} else {
NSString *str = [NSString stringWithFormat:@"%f",num/10000.0];
NSRange range = [str rangeOfString:@"."];
str = [str substringToIndex:range.location+2];
if ([str hasSuffix:@".0"])
{
return [NSString stringWithFormat:@"%@万",[str substringToIndex:str.length-2]];
}
else
return [NSString stringWithFormat:@"%@万",str];
}
}
else
return @"0";
}
6.2 iOS开发 -- iOS 14下popToRootViewControllerAnimated:YES 导致TabBar隐藏的问题
文章中的问题会出现在Xcode 12 + iOS 14上, 经过测试,
-
Xcode 11 + iOS14,
-
Xcode 12 + <= iOS 13
(不会出此类问题.)
问题:
我们处理UITabbar在push的时候的显示和隐藏, 之前因该是如下的操作:
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
if (self.viewControllers.count > 0) {
viewController.hidesBottomBarWhenPushed = YES;
} else {
viewController.hidesBottomBarWhenPushed = NO;
}
[super pushViewController:viewController animated:animated];
}
这个在iOS 14之前是没问题的, 但是升级到iOS 14, 发现我们在执行 popToRootViewControllerAnimated:YES的时候, UITabBar隐藏了.
解决:
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
if (self.viewControllers.count > 0) {
// 当前导航栏, 只有第一个viewController push的时候设置隐藏
if (self.viewControllers.count == 1) {
viewController.hidesBottomBarWhenPushed = YES;
}
} else {
viewController.hidesBottomBarWhenPushed = NO;
}
[super pushViewController:viewController animated:animated];
}
6.3 WkWebView 解决加载内容文字很小的问题
解决:在WKWebview加载完毕后的didFinishNavigation 代理方法里加上
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
{
//执行JS方法获取导航栏标题
[webView evaluateJavaScript:@"document.title" completionHandler:^(id _Nullable title, NSError * _Nullable error) {
self.navigationItem.title = title;
}];
NSString *jScript = @"var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);";
[self.wkWebView evaluateJavaScript:jScript completionHandler:nil];
[self showLeftBarButtonItem];
[_refreshControl endRefreshing];
}