在UIScrollView中将UILabel子视图设置为firstResponder

时间:2013-01-20 18:21:35

标签: uiscrollview delegates subview tap first-responder

我添加了一个标签,其中包含一些文字和指向ScrollView的链接, 当您点击这些链接(在标签中)时,委托方法将调用,显示弹出窗口并显示一些相关信息。

但问题从这里开始,我想当你点击除了链接之外的任何地方时,popover就会消失。

如果我向ScrollView添加UITapGestureRecognizer,链接的委托方法将不会调用。

我该如何处理标签处理链接上的点击,ScrollView处理其他点击?

我确实喜欢这样:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped)];
    [self.scrollView addGestureRecognizer:tap];

- (void)tapped
{
    if ([self.storyText.delegate respondsToSelector:@selector(attributedLabel:shouldFollowLink:)])

        [self.storyText.delegate performSelector:@selector(attributedLabel:shouldFollowLink:) withObject:self.storyText];
}

在tapped方法中我检查是否点击链接,应该调用委托,但Delegate不会调用。 我错过了某些人吗?

enter image description here

2 个答案:

答案 0 :(得分:0)

您可以使用自定义UIButtons代替标签,也可以在链接上放置具有清晰背景颜色的自定义UIButton,并为此按钮添加操作。

答案 1 :(得分:0)

解决! 解: 首先,我为我的scrollView创建一个自定义类,并从UIScrollView创建子类。 其次我重写

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

在我的自定义ScrollView类中。在这个方法中,我调用了一个方法来解除popover。

但重要的一点是,在将出现popover类的viewWillAppear方法中,我将self传递给自定义scrollView类。因为如果我不这样做,解雇popover的方法将不起作用(它需要这个类的对象)。

[self.scrollView initWithStoryViewController:self];

enter image description here

此图片显示我遇到此问题的方案: