ios - 代码没有被调用

标签 ios objective-c uitextfield uitextfielddelegate

shouldChnageTextInRange 方法中,我有一段代码验证用于货币输入的 textField。然后我尝试从 textField 获取 NSLog,但我从未得到结果。

这是我从 this answer 获得的经过编辑的代码:

- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    if (textField == self.myTextField)
    {
        static NSString *numbers = @"0123456789";
        static NSString *numbersPeriod = @"01234567890.";
        static NSString *numbersComma = @"0123456789,";   

        if (range.length > 0 && [string length] == 0) {
            // enable delete
            return YES;
        }

        NSString *symbol = [[NSLocale currentLocale] objectForKey:NSLocaleDecimalSeparator];
        if (range.location == 0 && [string isEqualToString:symbol]) {
            // decimalseparator should not be first
            return NO;
        }
        NSCharacterSet *characterSet;
        NSRange separatorRange = [textField.text rangeOfString:symbol];
        if (separatorRange.location == NSNotFound) {
            if ([symbol isEqualToString:@"."]) {
                characterSet = [[NSCharacterSet characterSetWithCharactersInString:numbersPeriod] invertedSet];
            }
            else {
                characterSet = [[NSCharacterSet characterSetWithCharactersInString:numbersComma] invertedSet];              
            }
        }
        else {
            // allow 2 characters after the decimal separator
            if (range.location > (separatorRange.location + 2)) {
                return NO;
            }
            characterSet = [[NSCharacterSet characterSetWithCharactersInString:numbers] invertedSet];               
        }
        return ([[string stringByTrimmingCharactersInSet:characterSet] length] > 0);
    }
    NSLog(@"%@", textField.text);
}

最后一个 NSLog 永远不会被调用。我该怎么做才能解决这个问题? (我将 delegate 设置为 self。)

最佳答案

你应该在返回之前输入代码。

- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSLog(@"%@", textField.text); //before return
    ...
}

关于ios - 代码没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30795903/

相关文章:

objective-c - GCDAsyncSocket 错误

ios - 在完成另一种方法后执行方法中的问题-iOS

ios - UITextField 代表不工作

ios - 调试错误 xcode 6- 使用 google maps sdk

iOS MagicalRecord 表格 View 的分组和排序。它们究竟是如何工作的?

ios - 出现键盘时 UITableViewController 不 ScrollView

ios - 通过热点网络的 GCDWebServer

iphone - 重新加载查看 iPhone

ios - 在自定义 UITextField 类中实现 TextField 协议(protocol)

ios - 如果文本为空,UITableViewCell detailTextLabel 不支持 KVO?苹果漏洞?