Обнаружение события перетаскивания UITableViewCell

Возможный дубликат:
Как получить уведомление о запуске и окончании перемещения UITableViewCell

Я реализовал UITableView с пользовательским дизайном. Этот UITableView должен поддерживать режим редактирования. При входе в режим редактирования UITableViewCell получает дополнительные элементы управления (EditControl, ReorderControl …). Они не очень хорошо подходят для моего пользовательского дизайна, и поэтому я хотел заменить их изображения. Для этой цели я подклассифицировал UITableViewCell и layoutSubview , где я заменяю изображения для этих элементов управления.

Проблема: при запуске операции перетаскивания изображение для EditControl заменяется обратно на исходное где-то в UITableViewCell. Я могу заменить его снова

 – tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath: 

когда пользователь перемещает перетаскиваемую ячейку в другую indexPath, но это слишком поздно.

Поэтому мой вопрос сводится к следующему: как я могу обнаружить момент, когда пользователь начинает перетаскивать UITableViewCell ?

One Solution collect form web for “Обнаружение события перетаскивания UITableViewCell”

Хотя комментарий Балы пошел в правильном направлении, у меня изначально были некоторые проблемы с правильной реализацией. Теперь я узнал, как это можно сделать. Короче: вам нужно создать собственный подкласс UITableViewCell . Переопределите layoutSubviews чтобы подключить UILongPressGestureRecognizer к UITableViewCellReorderControl . Определите протокол и используйте делегат, чтобы сообщить кому бы вы ни говорили о состоянии перетаскивания.

CustomTableViewCell.h:

 #import <UIKit/UIKit.h> @protocol CustomTableViewCellDelegate; @interface CustomTableViewCell : UITableViewCell { } @property (nonatomic, assign) id <CustomTableViewCellDelegate> delegate; @end @protocol CustomTableViewCellDelegate - (void)CustomTableViewCell:(CustomTableViewCell *)cell isDragging:(BOOL)value; @end 

CustomTableViewCell.m:

 #import "CustomTableViewCell.h" @implementation CustomTableViewCell @synthesize delegate = _delegate; - (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer { if (gestureRecognizer.state == UIGestureRecognizerStateBegan) { [_delegate CustomTableViewCell:self isDragging:YES]; // Dragging started } else if (gestureRecognizer.state == UIGestureRecognizerStateEnded) { [_delegate CustomTableViewCell:self isDragging:NO]; // Dragging ended } } - (void)layoutSubviews { [super layoutSubviews]; for (UIView *view in self.subviews) { if ([NSStringFromClass ([view class]) rangeOfString:@"ReorderControl"].location != NSNotFound) { // UITableViewCellReorderControl if (view.gestureRecognizers.count == 0) { UILongPressGestureRecognizer *gesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)]; gesture.cancelsTouchesInView = NO; gesture.minimumPressDuration = 0.150; [view addGestureRecognizer:gesture]; } } } } @end 

Имейте в виду, что, хотя этот код не использует какие-либо частные API, он все равно может перестать работать, если Apple изменит свою внутреннюю реализацию (например, изменив имя класса UITableViewCellReorderControl ).

  • Удаление строки в представлении таблицы без удаления основного объекта данных
  • UITableView: панель усадки и панель навигации на прокрутке вверх
  • NSFetchedResultsController fetchedObjects неверен после того, как изменения распространяются из контекста управляемого фонового объекта
  • UITableView cornerRadius с проблемами с пропускной способностью на iOS
  • moveRow (at: to :) не работает, если UITableView имеет много элементов
  • Swift - UITableView editActionsForRowAtIndexPath открывает UIPresentationController, когда нажимает Edit
  • CKAsset не будет отображаться в виде таблицы
  • Как я могу программно установить dataSource из UITableView?
  • UITableView выбирает и отменяет выбор строки
  • Как получить доступ к свойствам в нескольких пользовательских табличных видах
  • Использование AutoLayout для стека в двух столбцах разных высот
  • Interesting Posts

    Xcode Server Bot не будет подключаться к серверу Gitlab (не удалось интегрировать)

    чтение данных с водительских прав с использованием Tesseract OCR в iPhone

    Ошибки после обновления до Xcode 8: «Нет такого модуля» и «target переопределяет параметр« EMBEDDED_CONTENT_CONTAINS_SWIFT`build »

    Анимированный Gif внутри UITextView

    Как решить проблемы с клавиатурой в Swift 3?

    Facebook SDK iOS приглашает пользователя без FBWebDialogs

    xcodebuild: симулятор или устройство?

    Ошибка dequeueReusableCellWithIdentifier в моем UITableView в iOS5

    Как объединить несколько файлов plist в один?

    Срок годности токенов аутентификации Firebase

    Существует ли свойство «uniqueID» для контактов адресной книги?

    Что означает Swift для людей, впервые изучающих развитие iOS

    Самый эффективный способ изменения содержимого CMSampleBuffer

    UISearchController не отклоняется, когда View push

    Пользовательский сегментированный пользовательский интерфейс

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.