Как узнать, имеет ли UITextField в iOS пробелы
У меня есть UITextField, где пользователь может ввести имя и сохранить его. Но пользователю не следует вводить пробелы в текстовое поле.
1 - Как узнать, удалось ли пользователю ввести два пробела или заполнить пробелы в текстовом файле
2 - Как я могу узнать, заполняется ли textFiled только пробелами
edit - Недопустимо вводить только пробелы (пробелы)
Ответы
Ответ 1
Вы можете "обрезать" текст, который удаляет все пробелы в начале и конце. Если все оставленное - пустая строка, тогда вводится только пробел (или ничего).
NSString *rawString = [textField text];
NSCharacterSet *whitespace = [NSCharacterSet whitespaceAndNewlineCharacterSet];
NSString *trimmed = [rawString stringByTrimmingCharactersInSet:whitespace];
if ([trimmed length] == 0) {
// Text was empty or only whitespace.
}
Если вы хотите проверить, есть ли пробелы (в любом месте текста), вы можете сделать это следующим образом:
NSRange range = [rawString rangeOfCharacterFromSet:whitespace];
if (range.location != NSNotFound) {
// There is whitespace.
}
Если вы хотите, чтобы пользователь вообще не вводил пробелы, см. решение @Hanon.
Ответ 2
если вы действительно хотите "запретить" пользователю вводить пустое пространство
вы можете реализовать следующий метод в UITextFieldDelegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *resultingString = [textField.text stringByReplacingCharactersInRange: range withString: string];
NSCharacterSet *whitespaceSet = [NSCharacterSet whitespaceCharacterSet];
if ([resultingString rangeOfCharacterFromSet:whitespaceSet].location == NSNotFound) {
return YES;
} else {
return NO;
}
}
Если пользователь вводит пробел в поле, в текущем тексте не изменяется
Ответ 3
Используйте следующие строки кода
NSString *str_test = @"Example ";
NSCharacterSet *whitespaceSet = [NSCharacterSet whitespaceCharacterSet];
if([str_test rangeOfCharacterFromSet:whitespaceSet].location!=NSNotFound)
{
NSLog(@"Found");
}
если вы хотите ограничить использование пользователем ниже кода
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if([string isEqualToString:@" "])
{
return NO
}
else
{
return YES
}
}
Ответ 4
UPD: Поддержка Swift 2.0
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let whitespaceSet = NSCharacterSet.whitespaceCharacterSet()
let range = string.rangeOfCharacterFromSet(whitespaceSet)
if let _ = range {
return false
}
else {
return true
}
}
Ответ 5
У меня было такое же условие, которое не позволяло пользователю вводить пустое поле
Вот мой код и инструкция проверки
- (IBAction)acceptButtonClicked:(UIButton *)sender {
if ([self textFieldBlankorNot:fullNametext]) {
[email protected]"na";
}
// saving value to dictionary and sending to server
}
-(BOOL)textFieldBlankorNot:(UITextField *)textfield{
NSString *rawString = [textfield text];
NSCharacterSet *whitespace = [NSCharacterSet whitespaceAndNewlineCharacterSet];
NSString *trimmed = [rawString stringByTrimmingCharactersInSet:whitespace];
if ([trimmed length] == 0)
return YES;
else
return NO;
}
Ответ 6
Версия Heres Swift 3
let whitespaceSet = NSCharacterSet.whitespaces
let range = string.rangeOfCharacter(from: whitespaceSet)
if let _ = range {
return false
}
else {
return true
}
Ответ 7
@Ответ на Hanon довольно аккуратный, но мне нужно было разрешить хотя бы 1 пробел, поэтому на основе решения Hanon я сделал это:
Я объявила локальную переменную whitespaceCount, чтобы сохранить подсчеты пробелов.
Надеюсь, это поможет любому!
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSCharacterSet *whitespaceSet = [NSCharacterSet whitespaceCharacterSet];
if ([string rangeOfCharacterFromSet:whitespaceSet].location != NSNotFound)
{
whitespaceCount++;
if (whitespaceCount > 1)
{
return NO;
}
}
else
{
whitespaceCount = 0;
return YES;
}
}
Ответ 8
Здесь я использовал stringByReplacingOccurrencesOfString
.
- (BOOL)validateFields
{
NSString *temp = [textField.text stringByReplacingOccurrencesOfString:@" "
withString:@""
options:NSLiteralSearch
range:NSMakeRange(0, textField.text.length)];
if ([temp length] == 0) {
// Alert view with message @"Please enter something."
return NO;
}
}