2016-03-30 150 views
0

我是新手,正在尝试限制可以在文本框中输入的字符数,以及最新版本的Swift。我试图遵循几个不同的教程,并检查了网站上的几个不同的答案,但我没有太多运气。限制UITextField中的字符? - Swift/Xcode

目前,我有这样的进入了我的SWIFT文件:

@IBAction func InfoTextFieldLimit(sender: UITextField) { 

     self.InfoTextField.delegate = self 

     func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 

      let currentCharacterCount = textField.text?.characters.count ?? 0 
      if (range.length + range.location > currentCharacterCount) { 

       return false 
      } 

      let newLength = currentCharacterCount + string.characters.count - range.length 
      return newLength <= 10 
     } 
    } 

...我没有得到任何错误,但似乎没有任何要发生的事情,当我运行的应用程序。

我也尝试了至少3种其他方法,我没有打扰复制。 (但可以根据要求提供)

有人可以告诉我我做错了什么,并指出我在正确的方向吗?将不胜感激! ......我觉得我很可能会忽视那些显而易见的事情。

我也想用textview来做这个事情,那会怎样呢?

+0

这里是你的问题的链接别处:http://stackoverflow.com/questions/433337/set-the - 最大字符长度的uitextfield?rq = 1 – Nshweky

+0

我认为问题是你没有正确设置委托。什么是IBAction方法?您可以在viewDidLoad中将“self”设置为textfield委托。 – Surely

回答

0

我本来这段代码在Objective-C:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSUInteger newLength = [textField.text length] + [string length] - range.length; 
    return (newLength > 4) ? NO : YES; 
} 

我试图将其转换为快捷,让我知道,如果它的工作原理...你必须使用UITextFieldDelegate方法。

func textField(textField:UITextField,shouldChangeCharactersInRange range:NSRange,replacementString string:NSString)->Bool{ 
var newLength:NSUInteger = textField.text.length + string.length - range.length 

return null(newLength > 4)?false:true 

} 
+0

我其实也没有这样的运气,但是我能够得到原来的代码工作,我已经在我的问题中发布多一点试验和错误后发布。我想我确实有我的委托方法设置错误..但是现在我遇到了另一个小问题。我在我的视图控制器中有3个不同的文本框,我只想限制它。的字符在其中之一,而不是所有..我试过“if(textfield == MyTextField){”之后“Bool {”但现在我卡住了..我该如何做到这一点? ...谢谢您的帮助! – aspenfox

+0

对不起,我不确定我是否理解你在说什么...两个文本框的比较不起作用? – Nshweky

0
func textField(textField: UITextField, shouldChangeCharactersInRange range:  NSRange, replacementString string: String) -> Bool { 
    let maxLength = 50 
    guard let text = textField.text else { return true }  
    let newLength = text.characters.count + string.characters.count - range.length 
    return newLength <= maxLength 
} 

还要确保您在UITextField的委托设置为UIViewController

+0

当你只有一个文本字段时,这很有用但是我有5个文本字段,我想限制其中的一个,所以我该怎么办?请帮帮我 –