Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何为textField创建类别_Ios_Objective C_Uitextfield_Objective C Category - Fatal编程技术网

Ios 如何为textField创建类别

Ios 如何为textField创建类别,ios,objective-c,uitextfield,objective-c-category,Ios,Objective C,Uitextfield,Objective C Category,我想创建一个与 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 此方法的优点是不允许用户输入无效字符 是否可以在TextField类别中管理此方法 下面的代码验证文本字段,任何人都可以帮助我创建它的类别 - (BOOL)textField:(UITextField *)textField s

我想创建一个与

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
 replacementString:(NSString *)string
此方法的优点是不允许用户输入无效字符

是否可以在TextField类别中管理此方法

下面的代码验证文本字段,任何人都可以帮助我创建它的类别

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{

 if (textField == NameText )
    {
        if ([string isEqualToString:@""])
        {
            NSString *originalString = textField.text;
            NSInteger newLength = [textField.text length];
            if (originalString.length > newLength)
                NameText.text = [originalString substringToIndex:newLength];
            return YES;
        }
        else
        {
            BOOL canEdit=NO;

            NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"1234567890-/:;()&@\".,?!'[]{}#%^*+=_\\|~<>$£₹€•"];
            for (int i = 0; i < [string length]; i++)
            {
                unichar c = [string characterAtIndex:i];
                if ([myCharSet characterIsMember:c])
                {
                    canEdit=NO;
                }
                else
                {
                    if ([NameText.text length] >= 10)
                    {
                        canEdit=NO;
                    }
                    else
                    {
                        canEdit=YES;
                    }
                }
            }
            return canEdit;
        }
    }
 return YES;
}
-(BOOL)textField:(UITextField*)textField应更改字符范围:(NSRange)范围替换字符串:(NSString*)字符串
{
如果(textField==NameText)
{
if([string IsequalString:@”“)
{
NSString*originalString=textField.text;
NSInteger newLength=[textField.text length];
如果(原始字符串长度>新长度)
NameText.text=[originalString substringToIndex:newLength];
返回YES;
}
其他的
{
BOOL canEdit=否;
NSCharacterSet*myCharSet=[NSCharacterSet characterSetWithCharactersInString:@“1234567890-/:;()&@\”,!“[]{}%^*+=\\\\\\\\\\~$₹€•"];
对于(int i=0;i<[字符串长度];i++)
{
unichar c=[string characterAtIndex:i];
if([myCharSet成员:c])
{
canEdit=否;
}
其他的
{
如果([NameText.text length]>=10)
{
canEdit=否;
}
其他的
{
canEdit=是;
}
}
}
返回canEdit;
}
}
返回YES;
}
注意:我不想创建任何显示警报的自定义方法 当用户输入无效数据时。我希望该用户将无法输入 无效数据

@接口myLimitedTextView:UITextView
@结束
@实施
-(instancetype)init{//我不确定是否有更多的init变量需要覆盖。
self=[super init];
如果(自我){
self.delegate=self;//不要在IB中设置委托!
}
}
//覆盖getter和setter可能更有效
-(void)setDelegate{
//如果调用setter,您可能希望在这里记录一些要查看的内容
self.delegate=self;
}

-(您是否希望UITextField扩展充当自己的代理?我不认为您可以通过使用扩展来实现这一点,但您可以将UITextField子类化,并直接从IB(故事板编辑器)中引用此子类).不明白你的意思,简要说明一下。好吧。你为什么要在一个类别中这样做?这只是为了重用解决方案吗?然后子类UITextField,在子类的init方法中让代理引用self。你的子类当然需要符合协议UITextFieldDelegate。你不能在扩展中以任何可重用的方式这样做在没有更多代码行的类别中,无论你在何处重用它。你能用代码回答我的问题来简要说明你的建议吗?如果我能用子类来做,那么我也可以,但如果你知道如何做,请回答这个问题我不能在上面的代码中识别textfield==nametextfield,因为我已经定义了textfield在另一个类中,然后使用
if(textfield==self).
。顺便说一句
NameText
不是变量的合适名称。您应该改为使用
NameText
。但是,在上面的代码中,只需参考
textfield
self
@interface myLimitedTextView: UITextView <UITextViewDelegate>

@end

@implementation 

-(instancetype) init {  // not sure from the top of my head if there are more init variancies to be overwritten. 

  self = [super init];
  if (self) {
     self.delegate = self; //Do not set a delegate in IB!
  }
}

// overwriting getters and setters may even be more efficient 

- (void) setDelegate {
// You may want to NSLog here something to see, if the setter is called
  self.delegate = self; 
}

- (id <UITextFieldDelegate) getDelegate {
  return self;
}

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
  //Do your stuff here 
  return YES;
}

@end