У меня есть страница, которая содержит два текстовых поля, 2 метки и кнопку. Когда кнопка нажата, я просто проверяю, не пусты ли поля, и проверяю их. Это нормально работает. Но я могу нажать кнопку только один раз. После этого ничего не изменится, и я не смогу нажимать кнопку или редактировать текстовые поля!
Это мой код:
@IBAction func loginbtn(_ sender: Any) {
showActivityIndicator(uiView: view)
emailerrormsg.isHidden=true
passworderrormsg.isHidden=true
if emailtf.text == "" && passwordtf.text == "" {
emailerrormsg.text = "Email is required!"
emailerrormsg.isHidden = false
passworderrormsg.text = "Password is required!"
passworderrormsg.isHidden = false
stopActivityIndicator()
}
else if emailtf.text == ""{
emailerrormsg.text = "Email is required!"
emailerrormsg.isHidden = false
stopActivityIndicator()
}
else if !(isValidEmail(testStr: emailtf.text!)){
emailerrormsg.text = "Please enter a valid email!"
emailerrormsg.isHidden = false
stopActivityIndicator()
}else if passwordtf.text == "" {
passworderrormsg.text = "Password is required!"
passworderrormsg.isHidden = false
stopActivityIndicator()
}
else{
hashedpass = (passwordtf.text!).sha1()
self.login(email: emailtf.text!, password: hashedpass)
}
}
Что я делаю неправильно?
func stopActivityIndicator(){
DispatchQueue.main.async {
self.loadingView.isHidden = true
}
}
func showActivityIndicator(uiView: UIView) {
let container: UIView = UIView()
container.frame = uiView.frame
container.center = uiView.center
loadingView.frame = CGRect(x: 0,y: 0,width: 80,height: 80)
loadingView.center = uiView.center
loadingView.backgroundColor = UIColor(red:0.16, green:0.27, blue:0.60, alpha:1.0)
loadingView.clipsToBounds = true
loadingView.layer.cornerRadius = 10
let actInd: UIActivityIndicatorView = UIActivityIndicatorView()
actInd.frame = CGRect(x: 0.0,y: 0.0,width: 40.0,height: 40.0);
actInd.activityIndicatorViewStyle =
UIActivityIndicatorViewStyle.whiteLarge
actInd.center = CGPoint(x: loadingView.frame.size.width / 2,y: loadingView.frame.size.height / 2);
loadingView.addSubview(actInd)
container.addSubview(loadingView)
uiView.addSubview(container)
actInd.startAnimating()
}
@NaderBesada во всех случаях
Что происходит в showActivityIndicator / stopActivityIndicator? возможно, вы не отвечаете на просмотр в методе show, но не отменяете изменение остановки
Вы проверили свой инспектор пользовательского интерфейса, есть ли какой-либо вид над кнопкой, принимающей событие?
@PuneetSharma только что разместил их в моем сообщении .. пожалуйста, проверьте их
@AatishMolasi, как это проверить?





Вы скрываете представление загрузки в методе остановки. Вместо этого скройте представление контейнера. Для этого вам нужно будет сделать просмотр контейнера объектом уровня класса (так же, как вы сделали представление загрузки)
Пожалуйста. Лучше абстрагировать функциональность загрузчика в объект. Таким образом, вы можете повторно использовать его в другом месте своего приложения.
не могли бы вы привести мне пример, как это сделать? извините, я новичок в этом
Он зависает только тогда, когда ваш адрес электронной почты действителен, или он зависает так во всех случаях?