1、tableViewcell 复用问题
代码如下:
for (UIView *view in cell.contentView.subviews) {
[view removeFromSuperview];
}
2、UITextView模仿UITextField的placeholder步骤:
- 创建并初始化一个全局控件UILabel标签;
- 将UILabel的背景颜色设置为透明颜色clearColor;
- 设置UILabel的textColor属性为灰色grayColor;
- 设置UILabel的text属性为需要的提示文字;
- 设置UILabel的font属性和self.textView.font一致;
- 将UILabel加载至self.textView图层上;
- 在textViewDidBeginEditing和textViewDidEndEditing内写实现方法。
3、点击空白区域收起键盘的方法:
- 方法一:如果是UITextfield,将textfield 的第一响应者注销掉既可;
- 方法二:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesBegan:touches withEvent:event];
[self.view endEditing:YES];
}
- 方法三:添加一手势,在手势触发方法里实现某功能
4、从相册中获取图片并压缩的方法:
-(void)changeHeaderBackground:(UITapGestureRecognizer *)gesture
{
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imagePicker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:imagePicker.sourceType];
}
imagePicker.delegate = self;
imagePicker.allowsEditing = NO;
[self presentViewController:imagePicker animated:YES completion:^{
}];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:@"public.image"]){
UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
CGSize imageSize = image.size;
imageSize.width = KWidth;
imageSize.height = HEADERHEIGHT;
image = [self imageWithImage:image scaledToSize:imageSize];
_headerBackground.image = image;
}
[picker dismissViewControllerAnimated:YES completion:^{
}];
}
//图片的压缩方法
-(UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize
{
UIGraphicsBeginImageContext(newSize);
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
5、点击状态栏返回Tableview的顶部的方法:
UITableview的属性 tableview.scrolltotop=YES/NO;
6、log的所在的文件位置方法:
#define NSLog(format, ...) do { \
fprintf(stderr, "<%s : %d> %s\n", \
[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], \
__LINE__, __func__); \
(NSLog)((format), ##__VA_ARGS__); \
fprintf(stderr, "-------\n"); \
} while (0)
#define NSLogRect(rect) NSLog(@"%s x:%.4f, y:%.4f, w:%.4f, h:%.4f", #rect, rect.origin.x, rect.origin.y, rect.size.width, rect.size.height)
#define NSLogSize(size) NSLog(@"%s w:%.4f, h:%.4f", #size, size.width, size.height)
#define NSLogPoint(point) NSLog(@"%s x:%.4f, y:%.4f", #point, point.x, point.y)
7、现循环创建一系列Button ,如何实现当点击Button时Button的背景色会变化,关键是点击不同的Button会显示不同的文本,并且文本不重复添加?
- for 循环实例化UIButton ,图片的选中(selected)和正常(normal)两种状态,默认不是选中状态;
- 实例化一全局的UILabel,其text值在Button的点击时间中赋值;
- Button的点击事件中,需改变Button的selected状态( button.selected = !
button.seected; )且为了只让一个Button为选中状态需在点击事件中填加如下代码:
for (UIButton *subView in btn.superview.subviews) {
if ([subView isKindOfClass:[UIButton class]]) {
subView.selected = NO;
}
}
8、创建一UITableview,其cell的分割线不能居左显示?
在ios7中,UITableViewCell左侧会有默认15像素的空白。这时候,设置setSeparatorInset:UIEdgeInsetsZero 能将空白去掉。但在ios8中,设置setSeparatorInset:UIEdgeInsetsZero 已经不起作用了。
解决办法首先在viewDidLoad方法加入以下代码:
if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[self.tableView setSeparatorInset:UIEdgeInsetsZero];
}
if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
[self.tableView setLayoutMargins:UIEdgeInsetsZero];
}
然后在UITableView的代理方法中加入以下代码:
- (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];
}
}
9、instancetype与id的区别?
相同点:都可以作为方法的返回类型;
不同点: ①instancetype 可以返回和方法所在类相同类型的对象,id 只能返回未知类型类型的对象;
②instancetype 只能作为返回值,不能像id作为参数;
10、内存中的堆和栈有何区别?堆和栈分别存什么数据?
区别:堆(heap)内存是动态分配的,一般存对象,并且需要手动释放;
栈(stack)内存是系统自动分配,一般存成员变量,无需手动管理内存;
11、当在控制器一个scrollView上添加图片滚动时,为何图片会有下偏移?
控制器在iOS7之后有一个相关的属性 automaticallyAdjustsScrollViewInsets
默认为: YES
12、关于Https,访问受限的问题
在Info.plist中添加NSAppTransportSecurity类型Dictionary;
在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES。
13、用UIAlertView 并键盘闪现的问题
-(void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
{
[[UIApplication sharedApplication].keyWindow endEditing:YES];
}
14、类成员变量的修饰词
@private: 私有成员,仅当前类访问;
@protected: 受保护成员,当前类和子类都可访问;(系统默认)
@public: 公共成员,所有类均可访问;
@package (不常用) 在框架内是公共的,在框架外是私有的
注:公共成员的调用使用“->”操作符;