2012-12-10 57 views
0

我試圖將方法alertViewShouldEnableFirstOtherButton中用戶輸入的第一個字母改爲大寫。一切正常的iOS 6中,但在iOS 5中,似乎我得到的無限循環(當我設置警報視圖的文本字段編程調用方法alertViewShouldEnableFirstOtherButton遞歸) 這是代碼:alertViewShouldEnableFirstOtherButton中的無限循環iOS5

- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView{ 
    NSString *inputText = [[alertView textFieldAtIndex:0] text]; 
    if(inputText.length==0)return NO; 

    unichar firstChar=[[inputText capitalizedString] characterAtIndex:0]; 
    NSString *capitalizedLetter= [NSString stringWithCharacters:&firstChar length:1]; 
    NSString *str=[inputText stringByReplacingCharactersInRange:NSMakeRange(0, 1) withString:capitalizedLetter]; 

    [[alertView textFieldAtIndex:0] setText:str];// setText calls again alertViewShouldEnableFirstOtherButton 
    return YES; 

} 

回答

0

- (BOOL)alertViewShouldEnableFirstOtherButton:用於alertView詢問其委託人是否應該啓用第一個(不取消)按鈕。 alertView可以隨時調用此方法(例如,它可能會在調用其文本域時調用它),以便從代理獲取YES/NO答案。因此,你不應該在這裏實施副作用。

我會推薦使用類似​​的東西,並使用其中一個textField委託方法(例如– textFieldDidBeginEditing:)來修改字符串。

0

其實我用shouldChangeCharactersInRange方法UITextField來大寫插入字符串的第一個字母。

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

    NSLog(@"range: %@ string: %@", NSStringFromRange(range), string); 
    if ([string isEqualToString:@""]) {// detect when the user removes symbol 
     if ([textField.text length] > 0)textField.text = [textField.text substringToIndex:[textField.text length] - 1];//remove last character from the textfield 
    } 
    if (range.location==0) {//capitalize first letter 
     NSString *upperString = [[textField.text stringByAppendingString:string] uppercaseString]; 
     textField.text = upperString; 
    }else { 
     textField.text=[textField.text stringByAppendingString:string]; 
    } 
    return NO; 
}