gpt4 book ai didi

iphone - 移除所有 UITextView 的手势识别器

转载 作者:行者123 更新时间:2023-11-29 13:05:52 28 4
gpt4 key购买 nike

我正在开发一个应用程序,它在 TableView 的自定义 UITableViewCell 中有一个 UITextView。 tableviewcell 有几个手势识别器。我的问题是 textview 在 tableViewCell 的识别器之前响应触摸。我长按了将单元格移动到另一个位置,但 textview 会尝试选择它的文本以进行复制/粘贴/放大镜功能。此外,textview 正在吞噬来自 tableview 本身的触摸,因此如果您开始滚动触摸 textview,则滚动将不会在 tableview 中起作用。

即使将 editable 属性设置为 false,textview 仍然想要选择文本并显示放大镜。

最初我使用 UITextField 而不是 UITextView 让一切正常,但我需要支持多行文本。

那么我怎样才能防止 textview 吞下任何触摸事件呢?任何建议或想法将不胜感激。

最佳答案

下面是我们如何处理包含在 UITableViewCell 中的 UITextView 用户交互:

1) 你的 UIViewController 应该符合 UITableViewDataSource, UITableViewDelegateUITextViewDelegate :

#import <UIKit/UIKit.h>

@interace MyExampleController : UIViewController <UITableViewDataSource, UITableViewDelegate, UITextViewDelegate>

2) 最初, TextView 的 userInteractionEnabled 属性设置为 NO

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *textViewCellIdentifier = @"MyTextViewCellIdentifier";
MyTextViewViewCell *cell = [tableView dequeueReusableCellWithIdentifier:textViewCellIdentifier];

if (!cell)
{
// ... do your stuff to create the cell...
cell.textView.userInteractionEnabled = NO;
cell.textView.delegate = self;
}

// do whatever else to set the cell text, etc you need...

return cell;
}

3) 检查是否通过 UITableViewDelegate 方法点击了 TextView 单元格:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
BOOL isTextViewCell = ... // do your check here to determine if this cell has a text view

if (isTextViewCell)
{
[[(MyTextTableViewCell *)cell textView] setUserInteractionEnabled:YES];
[[(MyTextTableViewCell *)cell textView] becomeFirstResponder];
}
else
{
// ... do whatever else you do...
}
}

4) 检查 \n 以确定何时让 textView 退出第一响应者(当用户按下 return 键时通过):

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if ([text rangeOfString:@"\n"].location != NSNotFound)
{
[textView resignFirstResponder];
textView.
return NO;
}

return YES;
}

5) 在 TextView 退出(结束编辑)后将文本保存到模型中一次:

- (void)textViewDidEndEditing:(UITextView *)textView
{
NSString *text = textView.text;
// do your saving here
}

这大部分是当场写的,所以可能会有一些小错误,但希望你能理解总体思路。

祝你好运。

关于iphone - 移除所有 UITextView 的手势识别器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18670021/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com