我正在使用TableView
处理应用,现在我遇到了下面列出的问题。
我的问题是:
当我按照每个人的方式点击链接时,它不起作用。我需要更长时间才能使它工作。我认为这是因为“Selectable”属性带来了Double Tap Gesture识别器,所以我的textView检查是否有第二次点击,但我不知道如何找到并删除只有双击识别器。
我该怎么办?
谢谢。
答案 0 :(得分:1)
您是否考虑过用UIWebView替换TextView,只是执行loadHTMLString函数?
这样当您点击链接时,它会立即打开吗?您甚至可以拥有一个UIWebView委托,并在按下链接时执行您想要的操作(自定义UIWebView而不是在Safari中自动打开等)
答案 1 :(得分:0)
查找并删除双击手势识别器
目标C
- (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
{
if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]])
{
[(UITapGestureRecognizer *)gestureRecognizer setNumberOfTapsRequired:1];
gestureRecognizer.enabled = NO;
}
}
<强>夫特强>
func addGestureRecognizer(gestureRecognizer: UIGestureRecognizer)
{
if gestureRecognizer.isKindOfClass(UITapGestureRecognizer)
{
(gestureRecognizer as! UITapGestureRecognizer).numberOfTapsRequired = 1
gestureRecognizer.enabled = false
}
}
答案 2 :(得分:0)
您可以处理点击事件..通过此代码 tapGesture.numberOfTapsRequired = 1
OR
为此,您需要在UITableViewCell中嵌入一个。但是没有必要创建自定义单元格。以下是您想要做的基本想法:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
UITextView *comment = [[UITextView alloc] initWithFrame:CGRectMake(cell.frame.origin.x, cell.frame.origin.y, cell.frame.size.width, tableView.rowHeight)];
comment.editable = NO;
comment.delegate = self;
[cell.contentView addSubview:comment];
[comment release];
}
return cell;
}
如果您不想要单元格附带的标准44pt高度,您当然需要设置rowHeight。如果你想要实际的单元格,你需要添加自己的逻辑,这样只有你想要的单元格才是textView,但这是基本的想法。其余的是你自己定制适合你的配件。希望这有帮助
编辑:要绕过textView进入您的单元格,有两种方法可以解决这个问题。
1)你可以创建一个自定义的textView类并覆盖touchesBegan将消息发送到super:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
}
这会将触摸事件发送到其superview,这将是你的tableView。考虑到你不想制作自定义UITableViewCells,我想你可能也不想制作自定义的textView类。这导致我选择二。
2)创建textView时,删除comment.editable = NO;。我们需要保持它可编辑,但会在委托方法中修复它。
在您的代码中,您需要插入一个textView委托方法,我们将从那里完成所有工作:
编辑:更改此代码以与UITableViewController一起使用
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {
// this method is called every time you touch in the textView, provided it's editable;
NSIndexPath *indexPath = [self.tableView indexPathForCell:textView.superview.superview];
// i know that looks a bit obscure, but calling superview the first time finds the contentView of your cell;
// calling it the second time returns the cell it's held in, which we can retrieve an index path from;
// this is the edited part;
[self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
// this programmatically selects the cell you've called behind the textView;
[self tableView:self.tableView didSelectRowAtIndexPath:indexPath];
// this selects the cell under the textView;
return NO; // specifies you don't want to edit the textView;
}
如果那不是您想要的,请告诉我们,我们会让您整理出来