2013-08-04 34 views
0

我想在我的textview上倒計時。我的.h和.m文件安裝如下。基本上,我所需要的是一個textview標籤,當用戶輸入文本時,該標籤從140開始倒數​​。一旦textview達到140個字符,用戶應該不能再輸入文字。我不確定我在這裏做錯了什麼。任何幫助將是偉大的!謝謝!Textview倒數標籤

@interface LeaveTipViewController : UIViewController 

@property (weak, nonatomic) IBOutlet UIBarButtonItem *tipCancelButton; 

@property (weak, nonatomic) IBOutlet UIBarButtonItem *tipSubmitButton; 

@property (weak, nonatomic) IBOutlet UITextView *tipText; 

@property (weak, nonatomic) IBOutlet UILabel *countLabel; 

- (IBAction)tipCancelPressed:(id)sender; 

- (IBAction)tipSubmitPressed:(id)sender; 

@end 

在我的.m文件

在我.h文件中

-(void)textViewDidChange:(UITextView *)textView 
{ 
    int len = tipText.text.length; 
    countLabel.text=[NSString stringWithFormat:@"%i",140-len]; 

} 

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range 
replacementText:(NSString *)text 
{ 
    BOOL flag = NO; 
    if([text length] == 0) 
    { 
     if([tipText.text length] != 0) 
     { 
      flag = YES; 
      return YES; 
     } 
     else { 
      return NO; 
     } 
    } 
    else if([[tipText text] length] > 139) 
    { 
     return NO; 
    } 
    return YES; 
} 

回答

1

添加到您的viewController接口LeaveTipViewController:UIViewController中

套自.tipText.delegate = self

並使用這兩種方法

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 
NSUInteger newLength = [textView.text length] + [text length] - range.length; 
return (newLength > 140) ? NO : YES; 
} 

-(void)textViewDidChange:(UITextView *)textView 
{ 
int maxChars = 140; 
int charsLeft = maxChars - [textView.text length]; 

     if(charsLeft == 0) { 
    UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"No more characters" 
                message:[NSString stringWithFormat:@"You have reached the character limit of %d.",maxChars] 
                delegate:nil 
              cancelButtonTitle:@"Ok" 
              otherButtonTitles:nil]; 
    [alert show]; 
} 

    self.lblLettersCount.text = [NSString stringWithFormat:@"%d characters left",charsLeft]; 
} 
+0

嗨,我遇到了麻煩self.tipText.delegate = self ...我在哪裏放置那部分? – Brandon

+0

In viewDidLoad方法。或者在Interface Builder中,只需將代理字段指向您的類 – nerowolfe

+0

woohoo!確定它的工作原理,但我得到一個錯誤:分配給ID 從不兼容的類型leavetipcontroller const_strong – Brandon

3

你需要計算編輯之前完成之後,將存在的實際文本你決定是否允許編輯:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 
    NSString *resultingText = [textView.text stringByReplacingCharactersInRange:range withString:text]; 

    return ([resultingText length] <= 140); 
} 
+0

非常感謝。我甚至不能讓textViewDidChange正確啓動。我是否在我的.h文件中做了不正確的事情?有什麼想法,爲什麼這將不會工作? – Brandon

+0

你是否將控制器設置爲文本視圖委託? – Wain

+0

可能不是 - 虐待四處看看怎麼做 – Brandon

1

您可以使用下面的代碼檢查,並得到字符數:

- (void)textViewDidChange:(UITextView *)textView{ 

    NSInteger maxLength = 140; 

    NSString *text = textView.text; 

    if([[textView text] length] > maxLength) 
    { 
     textView.text = [text substringToIndex:[text length]-1]; 
    } 
} 
+0

非常感謝。我甚至不能讓textViewDidChange正確啓動。我是否在我的.h文件中做了不正確的事情?有什麼想法,爲什麼這將不會工作? – Brandon

4

你的這種方法只是改變

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 
    return textView.text.length + (text.length - range.length) <= 140; 
}