我有一个永远不会被调用的UITextview委托- (BOOL)textView:(UITextView *)textView
,我一直在努力解决这个问题几天无济于事。这就是我所拥有的
我在头文件中声明了<UITextViewDelegate>
,在ViewDidLoad中我设置了委托,我试过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中的章程数量。
答案 0 :(得分:0)
UITextView
仅向其委托发送textView:shouldChangeTextInRange:replacementText:
以响应用户事件。当您的程序设置myTextView.text
属性时,它不会发送该消息。
我很惊讶UITextView
正在向代理发送textViewDidChange:
,因为the documentation说&#34;此方法未响应以编程方式启动的更改而被调用。 &#34;
因此,您可以修改textViewDidChange:
中的文字(并依赖其行为与文档不同),或修改string1:
和string2:
来剪切文字。< / p>