在 UITextView 委托方法中未执行 if/else 语句

Posted

技术标签:

【中文标题】在 UITextView 委托方法中未执行 if/else 语句【英文标题】:if/else statement not being executed in UITextView delegate method 【发布时间】:2015-12-18 22:33:43 【问题描述】:

我的 Objective-c 代码中有一个 if/else 语句。 if/else 语句运行如下:

-(void)textViewDidBeginEditing:(UITextView *)textView

    if(textView==self.heardTextView)
    
        NSString *string = textView.text;
        if ([string rangeOfString:@"CLOSER"].location == NSNotFound)    
        
           NSLog(@"closest");
         
    

if/else 语句的前提是 - 如果textview 等于某个单词,则某些代码将运行。但是这段代码没有运行。

我在我的代码上放了一个breakpoint 和一个NSLOG,什么也没有。

【问题讨论】:

你的意思是整个方法没有执行还是if语句里面的东西没有执行?您是否将您的对象设置为文本视图的委托? 整个方法没有执行 你是什么意思,将对象设置为文本视图的委托? 他的意思是你提供的代码可能属于UIViewController子类。那么,您是不是 a)按住 Ctrl 键从您的 UITextView 拖动到您的视图控制器并建立 delegate 连接,b)改为在代码中执行,或者 c)忘记执行此操作? 你有你的答案 【参考方案1】:

如果您没有设置您的委托,请检查您的文本字段委托,然后它不会被调用..

在你的 Viewcontroller.H

选择你的 textview 给 textview 的委托。

【讨论】:

我已经实现了你所说的一切。但仍然没有运行 给我你的 Skype id【参考方案2】:

首先你需要设置文本视图的委托。您可以使用 Interface Builder 执行此操作,但如果您更喜欢使用代码,您可以在视图控制器的 viewDidLoad 方法中执行此操作:

myTextView.delegate = self;

现在,您希望何时执行 NSLog 语句?现在它看起来只有在你输入“CLOSER”时才会运行,然后让文本视图失去焦点,然后再次点击它。

如果您希望NSLog 在您键入时运行,您应该使用:

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

还要小心,在测试文本字段的内容之前,您需要计算文本字段中的下一个字符串值:

NSString *finalText = [textField.text stringByReplacingCharactersInRange:range withString:string];

【讨论】:

【参考方案3】:

检查您的代表,您不能将您的 textview 的代表设为自己。再检查一次。或者你可能已经完成了其他课程。

【讨论】:

以上是关于在 UITextView 委托方法中未执行 if/else 语句的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionReusableView 中未调用委托

在 UITextView 委托方法 textViewDidChange 中将文本保存在 Core Data 中是不是有效?

UITextView 委托未获得所有方法调用

在不使用委托方法的情况下检测 UITextView 和/或 UITextField 上的 SELECTION 更改

PopoverPresentationController 内部的 UITextView 不响应其委托方法

UItextView 委托方法未在子视图内调用