扩展UITextField,按键无反应

wjf8882300 2015-08-04 11:47:14
我想做一个输入电话的文本框,主要功能就是输入框式类型电话按键,输入数字不能超过11位,因为用的地方比较多,所以想独立出一个扩展类。下面这段代码实现了这功能,但在ios7.1上,更具体点是在iphone 4s手机上,点击文本框整个页面就不动了,也无法输入。而在模拟器上运行好的,在其他手机上也运行好的。后来我在真机上调试时发现,不加self.delegate = self;这段代码就好的,加了就不行。请大家帮我看看什么问题?有没有什么好的解决方案?
下面是我代码实现:

@interface PhoneTextField : UITextField<UITextFieldDelegate>
{
NSInteger length;
}
@end

@implementation PhoneTextField

- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
// Initialization code
length = 11;
self.keyboardType = UIKeyboardTypePhonePad;
self.delegate = self;
}
return self;
}

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (range.location >= length)
return NO; // return NO to not change text

return YES;
}

@end
...全文
122 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
胜负多少 2015-08-06
  • 打赏
  • 举报
回复
引用 4 楼 wjf8882300 的回复:
[quote=引用 3 楼 pppppp11 的回复:] [quote=引用 2 楼 wjf8882300 的回复:] [quote=引用 1 楼 pppppp11 的回复:] 自己成为自己的代理有啥意义,self直接调用方法就可以了,为啥self还要通过代理再去调用self的方法吗? 还有卡的原因,你看一下运行的时候内存占用大小,4s的内存是512M的,但是模拟器的内存就是你电脑的内存,所以内存是不一样大小的。因此,模拟器上可能不卡,但是真机上有可能会卡的。。
其实我想做的就是不需要在每个ViewController中实现UITextField的代理UITextFieldDelegate,有没有办法放在一个地方统一实现?且让ViewController能调用到这个代理[/quote] 给viewcontroller做个分类?[/quote] 这不失为一个方法,但总感觉不能将UITextField单独扩展一下。[/quote]其实我也没看明白,现在又感觉是不是把uitextfield继承重写一下就好了?以后你就不要用uitextfield了,用自己的textfield好了。
wjf8882300 2015-08-06
  • 打赏
  • 举报
回复
引用 3 楼 pppppp11 的回复:
[quote=引用 2 楼 wjf8882300 的回复:] [quote=引用 1 楼 pppppp11 的回复:] 自己成为自己的代理有啥意义,self直接调用方法就可以了,为啥self还要通过代理再去调用self的方法吗? 还有卡的原因,你看一下运行的时候内存占用大小,4s的内存是512M的,但是模拟器的内存就是你电脑的内存,所以内存是不一样大小的。因此,模拟器上可能不卡,但是真机上有可能会卡的。。
其实我想做的就是不需要在每个ViewController中实现UITextField的代理UITextFieldDelegate,有没有办法放在一个地方统一实现?且让ViewController能调用到这个代理[/quote] 给viewcontroller做个分类?[/quote] 这不失为一个方法,但总感觉不能将UITextField单独扩展一下。
胜负多少 2015-08-05
  • 打赏
  • 举报
回复
引用 2 楼 wjf8882300 的回复:
[quote=引用 1 楼 pppppp11 的回复:] 自己成为自己的代理有啥意义,self直接调用方法就可以了,为啥self还要通过代理再去调用self的方法吗? 还有卡的原因,你看一下运行的时候内存占用大小,4s的内存是512M的,但是模拟器的内存就是你电脑的内存,所以内存是不一样大小的。因此,模拟器上可能不卡,但是真机上有可能会卡的。。
其实我想做的就是不需要在每个ViewController中实现UITextField的代理UITextFieldDelegate,有没有办法放在一个地方统一实现?且让ViewController能调用到这个代理[/quote] 给viewcontroller做个分类?
wjf8882300 2015-08-05
  • 打赏
  • 举报
回复
引用 1 楼 pppppp11 的回复:
自己成为自己的代理有啥意义,self直接调用方法就可以了,为啥self还要通过代理再去调用self的方法吗? 还有卡的原因,你看一下运行的时候内存占用大小,4s的内存是512M的,但是模拟器的内存就是你电脑的内存,所以内存是不一样大小的。因此,模拟器上可能不卡,但是真机上有可能会卡的。。
其实我想做的就是不需要在每个ViewController中实现UITextField的代理UITextFieldDelegate,有没有办法放在一个地方统一实现?且让ViewController能调用到这个代理
胜负多少 2015-08-04
  • 打赏
  • 举报
回复
自己成为自己的代理有啥意义,self直接调用方法就可以了,为啥self还要通过代理再去调用self的方法吗? 还有卡的原因,你看一下运行的时候内存占用大小,4s的内存是512M的,但是模拟器的内存就是你电脑的内存,所以内存是不一样大小的。因此,模拟器上可能不卡,但是真机上有可能会卡的。。

29,028

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧