Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 从未调用UITextView委托_Objective C_Ios_Xcode_Cocoa Touch - Fatal编程技术网

Objective c 从未调用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,

我有一个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(newLength
UITextView
仅向其委托发送
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(@“已达到限制”);