IOS Двойной щелчок по элементу ячейки в UITableView не будет прокручиваться

У меня есть UITableView который содержит UITextField в каждой ячейке
Когда я нажимаю UITextField в ячейке, клавиатура будет показывать и закрывать мою ячейку. Поэтому я перемещаю свою ячейку вверх, используя.

 - (void)keyboardWasShown:(NSNotification*)aNotification { CGPoint scrollPoint = CGPointMake(0, self.activeInputView.frame.origin.y); [self.tableView setContentOffset:scrollPoint animated:YES]; } 

Если я использую один клик по каждой ячейке, мое приложение работает нормально.
Однако я использую двойной щелчок по каждой ячейке (это означает, что я нажимаю на нее 2 раза очень быстро), моя ячейка перестанет прокручивать вверх.

7 Solutions collect form web for “IOS Двойной щелчок по элементу ячейки в UITableView не будет прокручиваться”

В этой строке

CGPoint scrollPoint = CGPointMake(0, self.activeInputView.frame.origin.y);

может быть 2 ошибки.

Во-первых, вы должны убедиться, что inputView, который вы захватили, является желаемым видом. Во-вторых, вы должны преобразовать выбранную точку в правильное представление, используя соответствующий метод.

См. Ссылку: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/doc/uid/TP40006816-CH3-SW52

Для дальнейшего изучения нужен больше контекста.

Кажется, что решение TPKeyboardAvoiding является решением.

Вы уверены, что scrollPoint верен?

Я просто создал образец проекта с фиксированным смещением, и все работает отлично. Сценарий таблицы прокручивается вверх после однократного и двойного нажатия на UITextField определенного UITableViewCell .

 - (void)keyboardDidShow:(NSNotification *)notification { CGPoint point = CGPointMake(0.0, 30.0); [self.tableView setContentOffset:point animated:YES]; } 

вместо того, чтобы делать код для ручной настройки фрейма tableview. Позвольте мне дать вам предложение, вы можете использовать IQKeyboardManager, чей код доступен в cocoapods, и он будет справляться при нажатии на текстовое поле ячейки, просмотр таблицы будет автоматически прокручиваться.

Попробуйте использовать стороннюю библиотеку IQKeyboardManager, это поможет вам решить эту проблему.

https://github.com/hackiftekhar/IQKeyboardManager

Замените следующий код в файле AppDelegate.m, а затем вам не нужно использовать метод scrollview для работы с клавиатурой:

 @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [[IQKeyboardManager sharedManager] setEnable:YES]; [self.window makeKeyAndVisible]; return YES; } 

Вы создали отдельный класс UITableViewCell?

Я считаю, что при прокрутке UITableView ваш пользовательский интерфейс зависает или когда вы дважды вставляете свой UITableView, перестает отвечать на запросы или требует времени для ответа.

Вот рабочий пример. Вы используете свойства contentInset и scrollIndicatorInsets вашего прокрутки, чтобы избежать появления клавиатуры при ее появлении. Вы должны зарегистрироваться для уведомления о клавиатуре. Используйте информацию в уведомлениях, чтобы определить размер клавиатуры – вы никогда не знаете, что это будет.

Использование вставки содержимого – это правильный способ справиться с этим для просмотра прокрутки. Если впоследствии вам потребуется прокрутить строку редактирования в представлении, используйте UITableView.scrollToRowAtIndexPath (_ :, atScrollPosition :, анимированные 🙂

Обратите внимание, что он делает то же самое, когда пользователь скрывает / показывает панель завершения.

 import UIKit import CoreGraphics // our Cell class class Cell : UITableViewCell { // cell reuse identifier for table view static let Identifier = "Cell" // the object the cell represents/displays. Could be anything you like var value:AnyObject? { didSet { // update our text field when our cell value is set. self.textField.text = value as? String } } // use a text field to display our contents, since that allows editing and showing the keyboard lazy var textField:UITextField = { let textField = UITextField() self.contentView.addSubview( textField ) return textField }() override func layoutSubviews() { super.layoutSubviews() self.textField.frame = contentView.bounds.insetBy(dx: 20, dy: 4 ) } } // table view data source class class DataSource : NSObject, UITableViewDataSource { var numberOfRows:Int { return items.count } let items = [ "Seoul", "São Paulo", "Bombay", "Jakarta", "Karachi", "Moskva", "Istanbul", "Mexico", "Shanghai", "Tokyo", "New" York, "Bangkok", "Beijing", "Delhi", "London", "Hong Kong", "Cairo", "Tehran", "Bogota", "Bandung", "Tianjin", "Lima", "Rio de Janeiro", "Lahore", "Bogor", "Santiago", "St Petersburg", "Shenyang", "Calcutta", "Wuhan" ] func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return numberOfRows } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier( Cell.Identifier ) as? Cell ?? Cell() cell.value = items[ indexPath.row ] return cell } } class ViewController : UIViewController { override func viewDidLoad() { super.viewDidLoad() // register for notifications when the keyboard appears: NSNotificationCenter.defaultCenter().addObserver( self, selector: "keyboardWillShow:", name: UIKeyboardWillChangeFrameNotification, object: nil) } override func viewDidLayoutSubviews() { tableView.frame = view.bounds } lazy var tableView:UITableView = { let tableView = UITableView() self.view.addSubview( tableView ) tableView.dataSource = self.dataSource tableView.delegate = self return tableView }() lazy var dataSource : DataSource = DataSource() // Handle keyboard frame changes here. // Use the CGRect stored in the notification to determine what part of the screen the keyboard will cover. // Adjust our table view's contentInset and scrollIndicatorInsets properties so that the table view content avoids the part of the screen covered by the keyboard @objc func keyboardWillShow( note:NSNotification ) { // read the CGRect from the notification (if any) if let newFrame = (note.userInfo?[ UIKeyboardFrameEndUserInfoKey ] as? NSValue)?.CGRectValue() { let insets = UIEdgeInsetsMake( 0, 0, newFrame.height, 0 ) tableView.contentInset = insets tableView.scrollIndicatorInsets = insets } } } // need to conform to UITableViewDelegate protocol since we are the table view's delegate extension ViewController : UITableViewDelegate { } // App set up stuff here: @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { lazy var window:UIWindow? = UIWindow() func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { window!.rootViewController = ViewController() window!.makeKeyAndVisible() return true } } 
  • Цель C: Как перезагрузить табличное представление сразу после переключения вкладок?
  • Отключить прохождение заголовка плавающего раздела UITableView?
  • Множество UILabels внутри саморазмера UITableViewCell
  • Ленивая загрузка UITableView с несколькими изображениями в каждой ячейке
  • Как использовать UITableView внутри UIScrollView и получать щелчок на ячейке?
  • Как настроить левое поле для прототипов ячеек в UITableView?
  • Основные отношения данных (быстро)
  • Как вертикально выровнять (в центре) содержимое UITableView?
  • Преобразование HTML в обычный текст в Swift
  • Использование UISearchController с UINavigationController
  • Как использовать многоразовые ячейки в uitableview для IOS
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.