У меня есть приложение, разработанное iPad, с использованием SplitViewController
, показывающего два вида: один с списком контактов и другой с подробностями этого контакта. SplitView
хорошо работает на iPad, но имеет некоторые проблемы на iPhone.UIControl блокирует все мои взгляды на iPhone
Существует UIControl, который принимает все размеры Master View, которые проверяют, есть ли у пользователя .touchDown interaction
, а также некоторые методы, вызываемые для включения или выключения этого UIControl
в зависимости от того, находимся ли мы в режиме редактирования контакта или не разрешаем пользователю взаимодействовать с экраном или нет:
private var disableInteractionClosure: (()->())?
private lazy var interactionOverlay: UIControl = {
let c = UIControl()
c.autoresizingMask = [.FlexibleHeight, .FlexibleWidth]
c.addTarget(self, action: "interactionOverlayAction", forControlEvents: .TouchDown)
return c
}()
func disableInteractionWhileEditingWithClosure(callback:()->()) {
if disableInteractionClosure == nil {
disableInteractionClosure = callback
/* display control overlay */
interactionOverlay.frame = navigationController!.view.bounds
navigationController!.view.addSubview(interactionOverlay)
}
}
func interactionOverlayAction() {
disableInteractionClosure!()
}
func enableInteraction() {
disableInteractionClosure = nil
interactionOverlay.removeFromSuperview()
}
в основном UIControl
используется для блокировки пользователя от переключения между контактом во время пользователя редактирует другой контакт/создание нового, блокируя взаимодействие со списком контактов и если изменения были сделаны на экране редактирования/создания, он запускает метод, который показывает всплывающее окно p сказал: «Были сделаны изменения, вы хотите продолжить без сохранения? отменить или продолжить ":
func cancel() {
self.view.endEditing(true)
let closure:()->() = {
self.layoutView.willResign()
self.delegate?.tabDetailsControllerDidCancel(self)
}
if layoutView.hasChanges() {
MKAlertViewController().instantaneousAlert(title: "Modification apportées", message: "Êtes-vous sur de vouloir continuer sans sauvegarder les modifications ?", confirmButtonTitle: "Oui", cancelButtonTitle: "Annuler", confirmed: {() -> Void in
closure()
}, canceled: {() -> Void in
})
} else {
closure()
}
}
Он отлично работает на IPad, потому что UIControl
только над Master View и включается, когда в режиме редактирования на Detail View (iPad 3D Debugging view), поэтому всплывал показывает только при ручной отмены редактирование/создание или при попытке изменить контакт при редактировании/создании, но поскольку splitView
не работают одинаково на iPads и iPhones, и похоже, что на iPhone главный вид расположен над подробным представлением, также находится UIControl
(iPhone 3D Debugging view), и это вызывает блокировку взаимодействий на всем экране и везде, где я нажимаю всплывающее окно отмены.
Можете ли вы, ребята, объяснить мне способ включить/показать этот UIControl только тогда, когда MasterView показывается, а не везде. Благодарю.