【问题标题】:UITextView not becoming first responderUITextView 没有成为第一响应者
【发布时间】:2012-09-22 18:27:42
【问题描述】:

我有一个包含UITextViewUIViewUIViewUIViewController 内启动。

但是当我触摸UITextView 框时,什么也没有发生。键盘不会出现,委托方法也不会响应交互。

代码:

    noteText = [[UITextView alloc]initWithFrame:CGRectMake(0, 0, 700, 240)];
    noteText.layer.borderColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.2].CGColor;
    noteText.layer.borderWidth = 2;
    [noteText setEditable:YES];
    noteText.userInteractionEnabled = YES;
    noteText.returnKeyType = UIReturnKeyDone;
    noteText.font = [UIFont fontWithName:@"Calibri" size:16];
    noteText.textColor = [UIColor blackColor];
    [self addSubview:noteText];

更新 1

我从 UIViewController 中删除了所有其他视图,并且只在 UIViewController 中放置了一个 UITextView,但仍然没有反应。光标或键盘均不出现。

【问题讨论】:

  • 确保在界面生成器的视图属性上选中“启用用户交互”。
  • 我不使用IB,但是我设置了[textview setUserInteractionEnabled:YES]和[textview setEnabled]
  • 你试过 [textview setDelegate:self]; ?
  • 其superview的维度是多少?
  • 尝试子类化文本视图并覆盖 touchesBegan:然后尝试子类化父视图并在其 touchesBegan 中:尝试使用 hitTest 查找正在获取触摸的视图:?

标签: objective-c ios uitextview uitextviewdelegate


【解决方案1】:

尝试在 UIView 中覆盖 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 以查看它是否正在接收触摸

以防万一,尝试为您的 UIView 对象设置userInteractionEnabled = YES;。如果它以某种方式设置为 NO,它将渗透到它的所有子视图

【讨论】:

  • 我已经覆盖了方法,但是没有响应。
【解决方案2】:

检查这些东西:

  1. 在右侧添加您的视图控制器UIWindow

  2. 在这个方法中设置窗口makeKeyAndVisible并将rootViewController添加到窗口:

    -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    我认为这里的 xib 文件或 appdelegate 有问题。

【讨论】:

  • 我不知道你在这里是什么意思。在 UIWindow 中加载 rootviewcontroller 不是问题。我也不使用 xib 文件。
【解决方案3】:

也许您在覆盖的-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 方法中有一些错误?也许你在那里做resignFirstResponder 或者把一些观点放在首位?

【讨论】:

  • 目前该方法看起来像这样,看看视图是否反应:-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ NSLog(@"Received Touch!"); }
  • 你使用[self addSubview:noteText];还是[self.view addSubview:noteText];
  • 因为作为 UITextView 的 noteText 是名为 NoteView 的 UIView 类的子视图。在那里我使用[self addSubview:noteText],NoteView 在 UIViewController 中被子视图,在那里我使用[selv.view addSubview:noteView]
  • 点击textView时光标会出现吗?
  • 不。连键盘都不会出现。但如果我对文本进行硬编码,则字符串会出现在 textview 中。
【解决方案4】:

试试这个: 在您的 .h 文件中符合委托 UITextViewDelegate

:<UITextViewDelegate>

在您的 .m 文件中:

noteText.delegate = self;

以及委托方法:

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView{
    [textView becomeFirstResponder];
    return YES;
}

- (BOOL)textViewShouldEndEditing:(UITextView *)textView{
    //resign for exapmple
    return YES;
}

希望对您有所帮助!

【讨论】:

  • 内置的becomeFirstResponder 调用textFieldShouldBeginEditing: 所以这将导致无限循环
【解决方案5】:

每当发生这种情况时,请检查以下项目,

  1. 确保仅在dealloc 中正确保留和释放文本视图。(如果您不使用ARC
  2. 检查文本视图及其父视图的框架。确保subview 完全适合父视图。还要确保所有 superviews 的文本视图都是这种情况。
  3. 检查delegate是否设置正确。

如果所有这些都完成了,请尝试在文本视图顶部添加一个按钮并检查它是否被调用 target selector。如果是,则问题出在文本视图委托或发布声明上。否则问题出在文本视图或其超级视图的框架设置上。

【讨论】:

    【解决方案6】:
    noteText = [[UITextView alloc]initWithFrame:CGRectMake(0, 0, 700, 240)];
    noteText.layer.borderColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.2].CGColor;
    noteText.layer.borderWidth = 2;
    [noteText setEditable:YES];
    noteText.userInteractionEnabled = YES;
    noteText.returnKeyType = UIReturnKeyDone;
    noteText.font = [UIFont fontWithName:@"Calibri" size:16];
    noteText.textColor = [UIColor blackColor];
    [self addSubview:noteText];
    

    // 两个建议

    self.userInteractionEnabled = YES; // superview may blocks touches
    self.clipsToBounds = YES; // superview may clips your textfield, you will see it
    

    【讨论】:

    • 就我而言,正是这样,UITextField 超级视图正在通过自动布局调整大小,但我没有注意到它,因为它没有剪裁到边界。
    • 在我的情况下,AutoLayout 也压缩了视图,但是因为 clipsToBounds 为否,所以它还是显示了。谢谢。
    • 对我来说添加 textView.userInteractionEnabled = true textView.editable = true 有效,我认为这是默认行为,猜想它可能被设置在我不知道的地方
    【解决方案7】:

    我发现了错误。

    在一个类中,我将 UITextView 分类而不是子类,并将 canBecomeFirstResponder 设置为 NO。

    【讨论】:

      【解决方案8】:

      我知道已经很晚了,但也许对某些人会有所帮助。我也遇到了同样的问题,用了之后就消失了

      [self setSelectable:true];
      

      在我的 UITextView 子类中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多