Вы используете getpwuid
для поиска записи файла пароля для определенного UID (который включает имя пользователя, но теперь не сам пароль) и getgrgid
для поиска записи в файле группы для определенного GID.
Когда я увидел этот вопрос, я реализовал эту идею в своем текущем проекте, и она сработала, спасибо за это. Так что идея сделать это, есть пользовательская кнопка назад. Я мог бы опубликовать весь код к этому, но это сделало бы это кормлением с ложечки. В любом случае, здесь идут шаги:
Сделайте UIButton
и сделайте его своей собственной кнопкой возврата UIBarButtonItem
в панели навигации вашего контроллера навигации, если вы когда-либо используете ее.
Селектор был бы, очевидно, таким, не обращайте внимания на код внутри, потому что он взят из моего проекта, но вы поняли:
func back() {
if let navCon = self.navigationController {
navCon.popViewController(animated: true)
}
}
И для двойного нажатия, для этого вам понадобится TapGesture. У меня есть этот объявлен так:
private lazy var doubleTapGesture: UITapGestureRecognizer = {
let gesture = UITapGestureRecognizer(target: self, action: #selector(self.doubleTap))
gesture.numberOfTapsRequired = 2
return gesture
}()
и добавить это к вашей кнопке. Селектор будет выглядеть так:
@objc private func doubleTap() {
self.navigationController?.popToRootViewController(animated: true)
}
VOILA! Работает плавно. Легко, правда? Надеюсь, это поможет!
Спасибо за все ваши ответы, но моя проблема заключалась в том, что я не хочу такого поведения, мой пост был неверно истолкован, и я прошу прощения за это.
В противном случае, я решил сам проблему. В панель навигации контроллера навигации было добавлено подпредставление, которое было скрыто под панелью. И так или иначе, у этого subView было включено взаимодействие, даже если оно было ниже. Поэтому я отключил взаимодействие, когда скрыто. Вот и все.
Как я прокомментировал выше при ответе Гленнса, отправка popViewController
в основной поток может быть проблемой, потому что он будет выполняться также при распознавании двойного касания. Может быть, это немного более «стабильное» решение:
private func setupBackButton() {
let myBackButton = UIButton(type: .custom) // or whatever
// setup title, image etc.
let myCustomBackButtonItem = UIBarButtonItem(customView: myBackButton)
self.navigationItem.leftBarButtonItem = myCustomBackButtonItem
// Create gesture recognizers for single and double tap:
let singleRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.singleTap))
singleRecognizer.numberOfTapsRequired = 1
let doubleRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.doubleTap))
doubleRecognizer.numberOfTapsRequired = 2
// single tap should only fire if double tap is not recognized
singleRecognizer.require(toFail: doubleRecognizer)
myBackButton.addGestureRecognizer(singleRecognizer)
myBackButton.addGestureRecognizer(doubleRecognizer)
}
@objc private func singleTap() {
self.navigationController?.popViewController(animated: true)
}
@objc private func doubleTap() {
self.navigationController?.popToRootViewController(animated: true)
}