突出显示 uitextview 显示 inputAccessoryView

highlighting uitextview shows inputAccessoryView

我有两个文本视图作为带有 inputAccessoryView 的 UITableView 的子视图,一个是不可编辑的,但我仍然希望允许人们突出显示和使用(复制 | 定义),另一个是在 inputAccessoryView.

里面

问题是当突出显示不可编辑的textView时,输入附件视图出现...(为什么!?)好像tableView突然变成了第一响应者,我猜是因为其中一个子视图变成了急救人员。问题是,我是否需要将这个不可编辑的 textView 从 tableViews 子视图中取出,或者是否有某种方法可以抑制突出显示时弹出的 inputAccessoryView?后者将是首选。

-(UITextView *)textView
{
    if (!_textView) {

        _textView = [[UITextView alloc]initWithFrame:CGRectZero];
        //_textView.delegate = self;
        _textView.font = [UIFont questionDemiBoldFontOfSize:36.0f];
        _textView.backgroundColor = [UIColor clearColor];
        _textView.editable = NO;
        _textView.scrollEnabled = NO;
        _textView.textColor = [UIColor whiteColor];
        _textView.tintColor = [UIColor whiteColor];
        _textView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin;

    }

    return _textView;
}

我通过添加

解决了这个问题
- (UIView *)inputAccessoryView
{
    if (self.textView.isFirstResponder)
        return nil;

    return self.accessoryView;
}

注意 显然,在某些情况下,您可能必须先在非编辑 textView 上手动调用 resignFirstResponder,然后再取回您的 accessoryView。不过,它相当干净,将来可能会对某人有所帮助。

这在 UITextView 子类中对我有用。 Swift 4

override func becomeFirstResponder() -> Bool {
    guard isEditable else { return false }
    return super.becomeFirstResponder()
}