您的位置:首页 > 其它

填坑记录

2016-07-12 00:00 204 查看
摘要: iOS

1. 问题:iOS7以后,tableView使用多个section并使用默认高度时,则section的展示只从 section = 1 开始。

方案:实现heightForHeaderInSection代理方法,return一个高度。

2. 限制字符输入问题

一般要实现限制字符输入要实现textView的两个代理方法:

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{

NSString *str = [NSString stringWithFormat:@"%@%@", textView.text, text];
if (str.length > MaxNumberOfDescriptionChars)
{
textView.text = [textView.text substringToIndex:MaxNumberOfDescriptionChars];
return NO;
}
return YES;
}
//常常由于联想输入的缘故,会有很多字符一起输入
-(void)textViewDidChange:(UITextView *)textView{
//该判断用于联想输入
if (textView.text.length > MaxNumberOfDescriptionChars)
{
textView.text = [textView.text substringToIndex:MaxNumberOfDescriptionChars];
}
}
这样实现的效果是:当用户输入到最大字符限制时,不能继续输入。

但问题在于:

当用户使用复制粘贴输入时,一旦超过字符限制,就会崩溃。

有人想到用 textView.text 和粘贴板上的字符 [UIPasterboard geneeralPasteboard].string 进行匹配的方法来区别用户是键盘输入还是粘贴输入——问题变成用户分几次粘贴时,就没办法对 textView.text 进行完整匹配。

解决方案:在上述两个代理方法中只实现第二个textViewDidChange:方法

3. 问题:label高度自适应

方案:

- (CGFloat)boundingRectWithStr:(NSString *)str withFont:(UIFont *)font
{

NSDictionary *attribute = @{NSFontAttributeName: font};

CGSize retSize = [str boundingRectWithSize:CGSizeMake(MAXFLOAT, Height)

options:

NSStringDrawingTruncatesLastVisibleLine |

NSStringDrawingUsesLineFragmentOrigin |

&
7fe0
nbsp; NSStringDrawingUsesFontLeading

attributes:attribute

context:nil].size;

return retSize.height;

}
4. label字号、颜色不同

NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"本团口令:%@(长按复制)", _token]];

[str addAttribute:NSForegroundColorAttributeName value:BBColor666666 range:NSMakeRange(0, 5)];

[str addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:12] range:NSMakeRange(0, 5)];

NSInteger length = [_token length];

[str addAttribute:NSForegroundColorAttributeName value:BBColor666666 range:NSMakeRange(5 + length, 6)];

[str addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:12] range:NSMakeRange(5 + length, 6)];

_tokenLabel.attributedText = str;
5.调用category的方法报错:selector not recognized

解决方法:Build Settings --> Linking-> Other Linker Flags 中加上 -ObjC 或者-all_load

************记得引用category文件啊!!!!************

原因:

之所以使用该标志,和Objective-C的一个重要特性:类别(category)有关。Unix的标准静态库实现和Objective-C的动态特性之间有一些冲突:Objective-C没有为每个函数(或者方法)定义链接符号,它 只为每个类创建链接符号。这样当在一个静态库中使用类别来扩展已有类的时候,链接器不知道如何把类原有的方法和类别中的方法整合起来,就会导致你调用类别 中的方法时,出现"selector not recognized",也就是找不到方法定义的错误。为了解决这个问题,引入了-ObjC标志,它的作用就是将静态库中所有的和对象相关的文件都加载进 来。

本来这样就可以解决问题了,不过在64 位的Mac系统或者iOS系统下,链接器有一个bug,会导致只包含有类别的静态库无法使用-ObjC标志来加载文件。变通方法是使用-all_load 或者-force_load标志,它们的作用都是加载静态库中所有文件,不过all_load作用于所有的库,而-force_load后面必须要指定具 体的文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: