IOS开发中经常遇到的一些问题

1.禁用UITextField的双击出现复制粘贴剪切等操作

有时候我们需要禁用UITextField的双击出现copy paste的功能,然而UITextField本身没有直接设置禁止用户复制粘贴剪切操作等方法,但是可以重载新建一个类继承UITextField,然后实现canPerformAction方法,只需覆盖canPerformAction:withSender方法就可以,canPerformAction:withSender属于UIResponder类的。

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender {

    UIMenuController *menuController = [UIMenuController sharedMenuController];
    if (menuController) {
        [UIMenuController sharedMenuController].menuVisible = NO;
    }
    return NO;
}

2.如果想让同一个控件同时即改变位置的移动,又放大。这样设置是无效果的

self.btn.transform = CGAffineTransformMakeTranslation(0, 100);
self.btn.transform = CGAffineTransformMakeScale(1.5, 1.2);

这样操作是创建新的transform然后赋值,给按钮的transform,第二次赋值的会把之前赋值的给覆盖,所以会达不到想要的效果。

解决办法:

self.btn.transform = CGAffineTransformMakeTranslation(0, 100);
    // 在之前的transform情况下,继续添加缩放的形变。
self.btn.transform = CGAffineTransformScale(_btn.transform, 1.2, 1.2);

3.将UIButton添加到UILabel,UIButton不能点击。

原因:

  1.UILabel是继承UIView的,默认不能监听点击事件。UIButton是继承UIControl能够监听点击事件。

  2.UIButton添加到UILabel,UILabel就是UIButton的父视图,父视图不能监听点击事件,自然不将事件传递给子视图,UIButton也不能监听点击事件了。

拓展:

因为我们一般在父类里实现的都是一些共用的属性和方法,而在子类中具体实现子类特有的方法。

因此在UIControl实现了监听点击的特有方法,即继承UIControl才能监听点击事件。

4.XIB的使用技巧

Xib是用来描述视图长什么样子,一个项目中允许有很多xib,因此我们需要给xib绑定一个标识,即他View中对应的class是谁,就代表描述哪个class。

Xib中owner的class是用来告诉xib中的View需要调用哪个对象的方法,就填谁。比如需要调用dog类中的方法,就填dog。

注意:在连线选择上别连错了,

步骤一:先考虑自己是想给视图添加控件了还是想给视图添加事件

步骤二:添加控件就跟xib中的view连线。添加一些事件就给xib中的File’s Owner 连线。

5. UIToolBar问题

注意:

UIToolBar中不能使用viewWithTag方法,获取UIToolBar里的子视图。

UIToolBar里的子视图都是UIBarButtonItem,而UIBarButtonItem继承NSObject,因此不能使用viewWithTag获取UIToolBar里的子视图

- (UIView *)viewWithTag:(NSInteger)tag的实现原理:

- (UIView *)viewWithTag:(NSInteger)tag
{

    // 1.如果当前tag和当前视图tag相同,直接返回
    if (self.tag == tag) return self;

    // 2.如果和当前视图tag不相同,遍历当前视图的所有子控件,查找对应的tag。
    for (UIView *view in self.subviews) {
        // 3.如果view不是UIView类或者UIView的子类直接返回nil
        if (![view isKindOfClass:[UIView class]]) return nil;
        if (tag == view.tag) {
            //  4. 返回有相匹配的视图
            return view;
        }
    }
    // 5.如果都没有找到,返回nil.
    return nil;
}

6.数据模型:属性采用的策略中除了基本类型需要用assign,字符串需要用copy,其他对象类型都需要用strong。

  Assign   对象销毁了,地址还在

  Weak   对象销毁了,地址就为nil

  Strong   都是对象,同一个地址,一变都变

    如果使用strong设置数值的时候,只是引用计数+1,并不会建立新的副本

  Copy      不会跟着变

 网络模型:为了避免不必要的麻烦,网络模型设置属性的时候,可以都使用copy

7.返回的数组后面调用copy方法的原因

  1.可以建立一个不可变的数组,外界无法修改

  2.否则外面可以通过id或者其他的方法修改数组内容不够安全

8.视图绘制方法注意点

- (void)drawRect:(CGRect)rect;

如果想要调用这个方法,必须视图在初始化的时候就设置尺寸,否则不会调用这个绘图方法

这样不会调用

ZYHButton *view = [[ZYHButton alloc] init];

必须在创建的时候就设置尺寸,如下:

ZYHButton *view = [[ZYHButton alloc] initWithFrame:CGRectMake(0, 0, 45, 25)];
时间: 2024-08-01 22:44:50

IOS开发中经常遇到的一些问题的相关文章

iOS开发中UIPopoverController的使用详解

这篇文章主要介绍了iOS开发中UIPopoverController的使用,代码基于传统的Objective-C,需要的朋友可以参考下 一.简单介绍 1.什么是UIPopoverController 是iPad开发中常见的一种控制器(在iPhone上不允许使用) 跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewController 它只占用部分屏幕空间来呈现信息,而且显示在屏幕的最前面 2.使用步骤 要想显示一个UIPopoverController,需要经过下列步骤

iOS开发中一些有用的小代码

1.判断邮箱格式是否正确的代码: //利用正则表达式验证 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES%@&qu

IOS开发中使用CNContact对通讯录增删改查

IOS开发中使用CNContact对通讯录增删改查 首先当然是把CNcontact包含在工程中: 1 @import Contacts; 1.下面是增加联系人的程序段: 1 CNMutableContact * contact = [[CNMutableContact alloc]init]; 2 contact.imageData = UIImagePNGRepresentation([UIImage imageNamed:@"22"]); 3 //设置名字 4 contact.gi

ios开发中-AFNetworking 的简单介绍

Blog: Draveness 关注仓库,及时获得更新: iOS-Source-Code-Analyze 在这一系列的文章中,我会对 AFNetworking 的源代码进行分析,深入了解一下它是如何构建的,如何在日常中完成发送 HTTP 请求.构建网络层这一任务. AFNetworking 是如今 iOS 开发中不可缺少的组件之一.它的 github 配置上是如下介绍的: Perhaps the most important feature of all, however, is the ama

iOS 开发中用户记住账户,密码

在iOS开发中经常会用到记住账户.密码,以此来提高用户的体验.下面就浅谈一下账户.密码的存储. 一.登录 记录已登录用户步骤,存入偏好设置中存储放入一个数组. 具体存储 1:存储用户到偏好设置中,其中用户是一个数组向服务器响应客户端后的一些操作(如果响应数据成功)其中用户和密码是一一对应的 1.1先从沙盒中偏好设置中读取对应的用户集合 读取用户名: NSMutableArray *AccArys = [NSMutableArray arrayWithArray:[[NSUserDefaults

iOS开发中KVC、KVO简介

在iOS开发中,KVC和KVO是经常被用到的.可以使用KVC对对象的属性赋值和取得对象的属性值,可以使用KVO监听对象属性值的变化.简单介绍一下KVC和KVO. 一:键值编码(KVC) KVC,全称 Key Value Coding(键值编码),是OC 语言的一个特性,使用KVC,可以对对象的属性进行动态读写. KVC的操作方法由 NSKeyValueCoding协议提供,而NSObject已经实现了这个协议,因此OC中的几乎所有对象都可以使用KVC操作.常用的KVC操作方法有: (1)设置属性

iOS开发中打电话发短信等功能的实现

在APP开发中,可能会涉及到打电话.发短信.发邮件等功能.比如说,通常一个产品的“关于”页面,会有开发者的联系方式,理想情况下,当用户点击该电话号码时,能够自动的帮用户拨出去,就涉及到了打电话的功能. iOS开发中,有三种方式可以打电话: (1)直接跳到拨号界面,代码如下 1 2 NSURL *url = [NSURL URLWithString:@"tel://10010"];  [[UIApplication sharedApplication] openURL:url]; 缺点:

iOS开发——淫技篇&iOS开发中各种淫技总结(六)

iOS开发中各种淫技总结(六) swift中指针的使用 在 Swift 中,指针都使用一个特殊的类型来表示,那就是 UnsafePointer<T>.遵循了 Cocoa 的一贯不可变原则,UnsafePointer<T> 也是不可变的.当然对应地,它还有一个可变变体,UnsafeMutablePointer<T>.绝大部分时间里,C 中的指针都会被以这两种类型引入到 Swift 中:C 中 const 修饰的指针对应 UnsafePointer (最常见的应该就是 C

iOS开发中的压缩以及解压

事实上,在iOS开发中,压缩与解压,我都是采用第三方框架SSZipArchive实现的 gitHub地址:   https://github.com/ZipArchive/ZipArchive 上面有详细的使用方法 因为ZipArchive不支持ARC,所以如果你的工程开启了ARC,那么就需要对ZipArchive设置一下.在ZipArchive.mm编译选项中,增加-fno-objc-arc即可. 最后,需要为工程链接libz.dylib动态链接库. 使用示范(压缩): // 获得mainBu

ios开发中object-c中UTF-8 和 GBK 的 NSString 相互转化的方法

应用都要遇到一个很头疼的问题:文字编码,汉字的 GBK 和 国际通用的 UTF-8 的互相转化稍一不慎, 就会满屏乱码.下面介绍 UTF-8 和 GBK 的 NSString 相互转化的方法 NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); char* c_test = "北京"; int nLen = strlen(c_test); NSS