1、在类中添加的集合不要忘了初始化(场景:在创建的一个cell中,添加了一个array作为属性,但是忘了给array初始化,导致从
array
中取出的值全部为“null”)2、在调用View设置内容的方法后,不要忘了调用重新绘制UI的方法
[self setNeedLayout];
尤其是UI根据数据内容动态更新的情况一定要记得调用,否则数据有可能显示不出来(场景:在一个描述商品信息的cell中,有一个label的frame是根据内容动态计算的,动态计算以后忘了重新绘制,导致该label的内容没有显示)3、当使用一个cell的
frame
时,不要使用bk_bottom
,要使用bk_height
,bk_height
能得到正确的值,而bk_bototm
不可以。(场景:在一个由多个不同样式cell组成的tableView中,由于第一个cell相对于自己的底部视图的相对位置使用了bk_bottom
,导致整个tableview的样式没有按照预期 的展现,整个tableview的分割视图都没有了,改用了bk_height
作为相对位置后,tableview到达了预期的效果)4、正确的获取textview中的值的最佳时机是在:
- (void)textViewDidChange:(UITextView *)textView{
//此处编写获取输入内容的逻辑
}
以下方法是编写输入字数显示逻辑的最佳时机:
//控制输入的字符数
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
NSString *toBeString = [textView.text stringByReplacingCharactersInRange:range withString:text]; NSInteger len = [toBeString length];
if (len > kMaxInputCharacterLength) { //如果输入框内容大于kMaxInputCharacterLength则弹出警告
_messageView.text = [toBeString substringToIndex:kMaxInputCharacterLength];
NSString *maxLength = [NSString stringWithFormat:@"不能超过%@个字",@(kMaxInputCharacterLength)];
[MBProgressHUD showWarning:maxLength];
return NO ;
}
return YES;
}
- 5、移除cell的contentView上视图的最佳方法:
[self.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
makeObjectsPerformSelector:
为系统方法比起我们自己手动调用遍历移除方法有更好的性能。
6、
tableview
的headerView
设置的时候要有frame
,如果没有frame
,在headerView
的frame
更新以后,需要设置tableview
的headerView
,否则tableview
的frame
会有问题。7、计算textfield相对于目标视图的frame,用于解决键盘遮挡问题,代码如下:
CGRect frame = textField.frame;
CGRect resultFrame = [textField convertRect:frame toView:self.view]; //把当前视图的frame转换到目标视图上
self.editTextFieldBottom = resultFrame.origin.y + kTextFieldHeight;