В настоящее время у меня есть приложение Cordova ioni c - angularjs, в котором я хочу заморозить прокрутку, пока пользователь выбирает текст (я включаю контекстное меню, следуя этому маленькому хаку )
Сейчас у меня есть собственный код Swift, захватывающий события UIMenuController.didShowMenuNotification
и UIMenuController.didHideMenuNotification
, который, в свою очередь, отправляет соответствующие javascript события документа для обработки веб-приложением и замораживает $ionicScrollDelegate
, как показано ниже. Это прекрасно работает, и прокрутка останавливается при отображении контекстного меню, однако, если пользователь хочет расширить / сжать выделение, контекстное меню временно исчезает во время расширения / сжатия, которое размораживает представление прокрутки, пока контекстное меню не появится снова после пользователь поднимает палец. Можно ли получить диапазон выделенного текста вместо того, чтобы замораживать представление прокрутки в состоянии отображения контекстного меню, чтобы представление прокрутки было заморожено, пока текст не выделен?
CDVContextMenu .swift
@objc(CDVContextMenu)
class CDVContextMenu: CDVPlugin {
typealias This = CDVContextMenu
static var sharedCommandDelegate: CDVCommandDelegate?
var contextMenuVisible = false
override func pluginInitialize() {
super.pluginInitialize()
This.sharedCommandDelegate = commandDelegate
NotificationCenter.default
.addObserver(self,
selector: #selector(menuDidShow),
name: UIMenuController.didShowMenuNotification,
object: nil)
NotificationCenter.default
.addObserver(self,
selector: #selector(menuDidHide),
name: UIMenuController.didHideMenuNotification,
object: nil)
}
// MARK: - Event Handlers
@objc
func menuDidShow(_ notification: Notification) {
This.sharedCommandDelegate?.evalJs("document.dispatchEvent(new Event('contextMenuDidShow'));")
contextMenuVisible = true
}
@objc
func menuDidHide(_ notification: Notification) {
This.sharedCommandDelegate?.evalJs("document.dispatchEvent(new Event('contextMenuDidHide'));")
contextMenuVisible = false
}
}
index. js
document.addEventListener('contextMenuDidShow', function() {
$ionicScrollDelegate.freezeScroll(true);
})
document.addEventListener('contextMenuDidHide', function() {
$ionicScrollDelegate.freezeScroll(false);
})