2016-08-19 5 views
0

Я работаю над приложением, используя TableView. Теперь я столкнулся с проблемой, перечисленной ниже.iOS Отключить распознаватель жестов Double Tap в Swift

  • Внутри моего TableView есть UITextView, который ДОЛЖЕН быть выбранным, но не доступен для редактирования (потому что мне нужно использовать и продолжать ссылки).

Мой вопрос:
, когда я нажимаю на ссылку, как все это делает, это не работает. Мне нужно удержать его немного дольше, чтобы заставить его работать. Я думал, что из-за свойства «Выбираемый» появляется распознаватель жестов Double Tap Gothure, поэтому мой textView проверяет, есть ли второй ответ, но я не знаю, как найти и удалить только распознаватель двойного нажатия.

Что мне делать?

спасибо.

+0

Почему нельзя использовать длинный распознаватель жестов нажатия? – user3182143

+0

показать свою кодировку для помощи – user3182143

+0

@ user3182143 Существует не много кодирования. UITextView создается в storyBoard. В cellForRowAtIndexPath я добавляю некоторые ссылки, используя атрибут attributeText.addAttribute (NSLinkAttributeName, value: linkAddress, range: linkWordRange); А затем просто назначьте атрибутText для textView. И мне нужно, чтобы моя ссылка была легко открыта, нажав. –

ответ

0

Поиск и удаление Double Tap Жест распознаватель

Objective C

- (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
{ 
    if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) 
    { 
    [(UITapGestureRecognizer *)gestureRecognizer setNumberOfTapsRequired:1]; 
    gestureRecognizer.enabled = NO; 
    } 
} 

Swift

func addGestureRecognizer(gestureRecognizer: UIGestureRecognizer) 
{ 
    if gestureRecognizer.isKindOfClass(UITapGestureRecognizer) 
    { 
     (gestureRecognizer as! UITapGestureRecognizer).numberOfTapsRequired = 1 
     gestureRecognizer.enabled = false 
    } 

} 
+0

Это не помогло мне –

+0

Отметьте мой ответ сейчас, когда я обновил – user3182143

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; 
} 

Вы, конечно, нужно установить RowHeight, если вы не хотите стандартную 44pt высоты, которая поставляется вместе с клеткой. И если вам нужны реальные ячейки, вам нужно добавить свою собственную логику, так что только ячейка, которую вы хотите, представляет собой textView, но это основная идея. Остальное - ваше, чтобы настроить ваш фитинг. Надеюсь, что это поможет

EDIT: чтобы обойти textView, чтобы добраться до вашей камеры, есть два способа сделать это.

1) вы можете сделать пользовательский класс TextView и перезаписать touchesBegan, чтобы отправить сообщение супер:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesBegan:touches withEvent:event]; 
} 

это будет посылать событие прикосновения к его надтаблице, который был бы ваш Tableview. Учитывая, что вы не хотите создавать пользовательские UITableViewCells, я думаю, вы, вероятно, тоже не хотите создавать собственный класс textView. Это приводит меня к выбору второй.

2) при создании textView удалите comment.editable = NO ;. Нам нужно сохранить его редактируемым, но исправим это в методе делегата.

В вашем коде, вы хотите, чтобы вставить метод TextView делегата, и мы сделаем всю работу оттуда:

EDIT: изменение этого кода для использования с 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; 
} 

If это не то, что вы хотели, просто дайте мне знать, и мы вас разобрали.

1

Вы рассмотрели возможность замены TextView на UIWebView и просто функцию loadHTMLString?

Таким образом, когда вы нажмете на ссылку, она откроется мгновенно? Вы даже можете иметь делегат UIWebView и делать то, что хотите, когда нажимается ссылка (пользовательский интерфейс UIWebView вместо автоматического открытия в сафари и т. Д.)

+0

Хорошее решение, но Apple 'UITextView Class Reference говорит, что в этой ситуации они не рекомендуют заменять' UITextView' 'UIWebView'. –