iphone - 为什么更改 UITextField 在一种情况下会导致无限循环,而在另一种情况下不会?

标签 iphone ios cocoa-touch uikit

//  self.wordTextField.text = @"32";
//  self.wordTextField.text = [self.wordTextField.text lowercaseString];
//  self.wordTextField.text = [self.wordTextField.text stringByReplacingOccurrencesOfString:@" " withString:@"?"];

NSString *removeString = @"`1234567890-=~!@#$%^&*()_+[]\\{}|;':\",./<>";
NSMutableSet *removeSet = [NSMutableSet set];
for (unsigned i = 0; i < removeString.length; i++) {
    NSRange range; range.location = i; range.length = 1;
    NSString *char_ = [removeString substringWithRange:range];
    [removeSet addObject:char_];
}
for (unsigned i = 0; i < self.wordTextField.text.length; i++) {
    NSRange range; range.location = i; range.length = 1;
    NSString *thisLetter = [self.wordTextField.text substringWithRange:range];
    if ([removeSet containsObject:thisLetter]) {
        self.wordTextField.text = [self.wordTextField.text stringByReplacingOccurrencesOfString:thisLetter 
                                                                                     withString:@""];
        i--;
    }
}

这三个注释行都导致我的方法进入无限循环,因为 self.wordTextField.text 位于编辑更改时调用的方法内,所以显然我设置 text 属性会导致更多编辑更改,从而导致在循环。我的问题是:为什么循环和条件语句中的 .text setter 不会导致这种行为?该部分工作完美,正如(用户)所期望的那样......

最佳答案

代码通过多次调用更改回调再次进入循环,但这不是无限循环,因为当从文本中删除所有无效字符时,它最终会停止。请注意,如果文本不包含任何要删除的字符,则不会调用循环内的 setter。

关于iphone - 为什么更改 UITextField 在一种情况下会导致无限循环,而在另一种情况下不会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9043403/

相关文章:

ios - UILabel 的图层在动画时不更新颜色

ios - 为父 UIView 的框架(大小)设置动画时自动调整 UILabel 的框架

ios - iOS 中 Speech to Text 的示例

iphone - 像iOS一样的App Store

iphone - Iphone SDK:播放 “system sound”

iphone - UIActivityController 在 Facebook 上发布

iphone - 在 View Controller 的宽度上水平均匀分布 UIButton 的最简单方法?

ios AUGraph 在 ios 5.0 中的音高转换

c++ - XCode 中的未知类型名称 'using'

ios - 这是强还是弱?