Создание подпредставления UILabel в UIScrollView для firstResponder
Я добавил метку с некоторым текстом и ссылками на ScrollView, когда вы нажимаете на эти ссылки (в метке), вызывается метод делегата, отображается всплывающее окно и отображается некоторая связанная информация.
но проблема начинается отсюда, я хочу, когда вы нажмете где-нибудь еще, кроме ссылок, всплывающее окно исчезнет.
если я добавлю UITapGestureRecognizer в ScrollView, метод делегата для ссылок не будет вызываться.
что я должен сделать, чтобы метка обрабатывает нажатия на ссылки, а 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];
}
В подключенном методе Im, проверяющем, нажимаю ли я на ссылку, должен вызываться делегат, но делегат не будет вызывать. Я что-то пропустил?
2 ответа
Решено! Решение: сначала я создаю собственный класс для своего scrollView и подклассирую его из UIScrollView. Во-вторых я переопределить
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
в моем собственном классе ScrollView. в этом методе я вызвал метод, чтобы отклонить поповер.
но важная часть заключается в том, что в методе viewWillAppear класса, всплывающее окно появится, я передал self в пользовательский класс scrollView. потому что, если бы я этого не сделал, метод отклонения popover не сработал бы (ему нужен объект этого класса).
[self.scrollView initWithStoryViewController:self];
эти изображения показывают, в каком сценарии у меня была эта проблема:
Вы можете использовать пользовательские кнопки UIB вместо меток или можете разместить пользовательские кнопки UIB с чистым фоновым цветом над ссылками и назначить действия для этих кнопок.