iOS 开发过程中的问题与解决方法

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会显示不同的文本,并且文本不重复添加?

  1. for 循环实例化UIButton ,图片的选中(selected)和正常(normal)两种状态,默认不是选中状态;
  2. 实例化一全局的UILabel,其text值在Button的点击时间中赋值;
  3. 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 (不常用) 在框架内是公共的,在框架外是私有的

注:公共成员的调用使用“->”操作符;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值