Objective c 从未调用UITextView委托
我有一个UITextview委托Objective c 从未调用UITextView委托,objective-c,ios,xcode,cocoa-touch,Objective C,Ios,Xcode,Cocoa Touch,我有一个UITextview委托-(BOOL)textView:(UITextview*)textView,从未被调用过,我为此苦苦挣扎了几天,但都无济于事。这是我的 我已经在头文件中声明了,在ViewDidLoad中我正在设置代理,我已经尝试了self.myTextView.delegate=self 和myTextView.delegate=self以及在NIB文件中连接委托,而不是以编程方式声明委托 我有几个自定义按钮,可以根据按钮的不同,通过两种不同的方法将文本插入UITextView,
-(BOOL)textView:(UITextview*)textView
,从未被调用过,我为此苦苦挣扎了几天,但都无济于事。这是我的
我已经在头文件中声明了
,在ViewDidLoad中我正在设置代理,我已经尝试了self.myTextView.delegate=self代码>
和myTextView.delegate=self代码>以及在NIB文件中连接委托,而不是以编程方式声明委托
我有几个自定义按钮,可以根据按钮的不同,通过两种不同的方法将文本插入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");}
-(BOOL)textView:(UITextView*)textView应更改textinrange:(nsrrange)范围替换text:(NSString*)文本{
nsuiger newLength=(textView.text.length-range.length)+text.length;
if(newLengthUITextView
仅向其委托发送textView:shouldChangeTextInRange:replacementText:
以响应用户事件。当您的程序设置myTextView.text
属性时,它不会发送该消息
我很惊讶,UITextView
正在向委托发送textViewDidChange:
,因为它说“这个方法不是为了响应程序启动的更改而调用的。”
因此,您可以在textViewDidChange:
中剪切文本(并依赖其行为与文档不同),或修改和string1:
和string2:
以剪裁文本。UITextView
仅向其委托发送textView:shouldChangeTextInRange:replacementText:
以响应用户事件。当程序设置myTextView.text
属性时,它不会发送该消息
我很惊讶,UITextView
正在向委托发送textViewDidChange:
,因为它说“这个方法不是为了响应程序启动的更改而调用的。”
因此,您可以在textViewDidChange:
中剪切文本(并依赖其行为与文档不同),或者修改和string1:
和string2:
来剪切文本。第一个注意事项是,您不会看到NSLog(@“其他更改的内容”)因为在他们到达之前,if
和else
都做了一次return
。-)是的,我知道,我在返回之前做了日志记录,但仍然没有运气。首先注意,你不会看到NSLog(@“其他更改”);
因为if
和else
在他们到达之前都做了一次返回操作。:-)是的,我知道,我在返回之前做了日志记录,但仍然没有运气。你肯定帮我指出了正确的方向。我选择了通过执行if来限制textview输入(myTextView.text.length>=10){myTextView.text=[myTextView.text substringToIndex:10];}NSLog(@“已达到限制”);
您确实帮助我指出了正确的方向。如果(myTextView.text.length>=10){myTextView.text=[myTextView.text substringToIndex:10];}NSLog(@“已达到限制”);