Есть ли альтернатива self.view.isUserInteractionEnabled = false в Swift? - PullRequest
0 голосов
/ 29 октября 2018

У меня есть приложение Xcode, которое выполняет некоторую работу Bakcgorund. в то время как он делает это, чтобы заблокировать пользователя от повторного нажатия кнопки входа в систему, я использую:

self.view.isUserInteractionEnabled = false

Единственная проблема в том, что пользователь ничего не видит на экране и может подумать, что приложение просто застряло. у тебя есть альтернатива, у которой есть какое-то наглядное пособие, чтобы показать, что экран заблокирован? (Без разработки такого диалога)

Ответы [ 4 ]

0 голосов
/ 29 октября 2018

Вы можете использовать UIActivityIndicator для такого рода требований.

Добавьте UIActivityIndicator в viewController в storyboard и создайте outlet в viewController's классе.

@IBOutlet weak var activityIndicator: UIActivityIndicatorView!

После нажатия loginButton,

  1. Набор self.loginButton.isEnabled = false
  2. Начать анимацию activityIndicator, используя activityIndicator.startAnimating()

После выполнения фоновой работы

  1. Набор self.loginButton.isEnabled = true
  2. Прекратить анимацию activityIndicator с помощью activityIndicator.stopAnimating()

Пример:

@IBAction func loginButtonTapped(_ sender: UIButton) {
    sender.isEnabled = false
    self.activityIndicator.startAnimating()
    //Your background task
    URLSession.shared.dataTask(with: URL(string: "")!) { (data, response, error) in
        //Callback after the task is finished 
        DispatchQueue.main.async {[weak self] in
            self?.activityIndicator.stopAnimating()
            sender.isEnabled = true
        }
    }
}
0 голосов
/ 29 октября 2018

Блокируйте взаимодействие только вашей UIButton.

При нажатии кнопки: -

sender.isUserInteractionEnabled = false 

И по завершении вашего запроса включите его: -

btnName.isUserInteractionEnabled = true
0 голосов
/ 29 октября 2018

Вы можете установить один флаг при запуске фоновой задачи и сбросить ее при завершении задачи

fileprivate var isLoading:Bool = false


func startBackgroundTask() {
   guard !isLoading else { return } // if task is running just return
   isLoading = true
   // don't forget to reset it on background task complete
}
0 голосов
/ 29 октября 2018

Отключить кнопку входа (и любые другие элементы управления), а не весь вид:

loginButton.isEnabled = false

Вы можете настроить отключенное состояние кнопки по своему усмотрению, если вам не нравится внешний вид по умолчанию (он слегка серого цвета).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...