- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个应用程序,它在 TableView 的自定义 UITableViewCell 中有一个 UITextView。 tableviewcell 有几个手势识别器。我的问题是 textview 在 tableViewCell 的识别器之前响应触摸。我长按了将单元格移动到另一个位置,但 textview 会尝试选择它的文本以进行复制/粘贴/放大镜功能。此外,textview 正在吞噬来自 tableview 本身的触摸,因此如果您开始滚动触摸 textview,则滚动将不会在 tableview 中起作用。
即使将 editable 属性设置为 false,textview 仍然想要选择文本并显示放大镜。
最初我使用 UITextField 而不是 UITextView 让一切正常,但我需要支持多行文本。
那么我怎样才能防止 textview 吞下任何触摸事件呢?任何建议或想法将不胜感激。
最佳答案
下面是我们如何处理包含在 UITableViewCell
中的 UITextView
用户交互:
1) 你的 UIViewController
应该符合 UITableViewDataSource
, UITableViewDelegate
和 UITextViewDelegate
:
#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/
我正在做一个项目,我的 android 在这个项目中作为一个网络服务器工作;输入带端口号的 IP 地址,打开 Web 界面,用户可以将文件上传到手机。我想在 Web 界面上显示一些图片,以便我们的界面
我是一名优秀的程序员,十分优秀!