【发布时间】:2012-01-18 20:48:45
【问题描述】:
我有一个 UITextview 委托 - (BOOL)textView:(UITextView *)textView 永远不会被调用,我已经为此苦苦挣扎了几天,但无济于事。这是我所拥有的
我已经在我的头文件和 ViewDidLoad 中声明了<UITextViewDelegate> 我正在设置委托,我已经尝试过self.myTextView.delegate = self;
和 myTextView.delegate = self; 以及在 NIB 文件中连接委托,而不是以编程方式声明它。
我有一些自定义按钮,根据按钮的不同,它们通过 2 种不同的方法将文本插入我的 UITextView,这里的第一种方法是...
-(IBAction)string1:(id)sender {
NSRange range = myTextView.selectedRange;
NSString * firstHalfString = [myTextView.text substringToIndex:range.location];
NSString * secondHalfString = [myTextView.text substringFromIndex: range.location];
myTextView.scrollEnabled = NO;
NSString * insertingString = [NSString stringWithFormat:@"insert my text string"];
myTextView.text = [NSString stringWithFormat: @"%@%@%@",
firstHalfString,
insertingString,
secondHalfString];
range.location += [insertingString length];
myTextView.selectedRange = range;
myTextView.scrollEnabled = YES;}
第二种方法是……
-(IBAction)string2:(id)sender {
myTextView.text = [myTextView.text stringByAppendingString:@"my other string value"];}
打开 NSLog,我可以看到
- (void)textViewDidChange:(UITextView *)textView{
NSLog(@"something changed");}
确实被调用了,但是这个委托永远不会被调用
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
NSUInteger newLength = (textView.text.length - range.length) + text.length;
if(newLength <= MAX_LENGTH)
{
return YES;
} else {
NSUInteger emptySpace = MAX_LENGTH - (textView.text.length - range.length);
textView.text = [[[textView.text substringToIndex:range.location]
stringByAppendingString:[text substringToIndex:emptySpace]]
stringByAppendingString:[textView.text substringFromIndex:(range.location + range.length)]];
return NO;
}
NSLog(@"something else changed");}
在我的 .M 文件顶部我定义了#define MAX_LENGTH 100
非常感谢任何帮助,我的总体目标是限制 UITextView 中的章程数量。
【问题讨论】:
-
第一个注释,你不会看到
NSLog(@"something else changed");,因为if和else在他们到达那里之前都会执行return。 :-) -
是的,我知道这一点,我在退货之前进行了日志记录,但仍然没有运气。
标签: objective-c ios xcode cocoa-touch