Вызов реализации делегата по умолчанию вместе с определяемыми пользователем методами

#ios #delegates

#iOS #делегаты

Вопрос:

Я внедряю GoogleSignInDelegate для аутентификации.В этом я реализовал метод делегирования GoogleSignIn.Я хочу добавить UIActivityIndicator в один из его методов с той же существующей реализацией.Есть идеи, как я могу это сделать?

Комментарии:

1. вы можете инициализировать UIActivityIndicator в методе viewDidLoad() действия и анимировать в любом из методов GoogleSignInDeleggate.

2. @SachinSaxena — Но тогда реализация этого метода по умолчанию не вызывается, что реализовано с помощью Google sign in framework. Как я могу выполнить обе реализации для этого метода делегирования?

3. Я приложил один ответ ниже. Я реализовал подобное в своем приложении.

Ответ №1:

В моем контроллере регистрации я реализовал метод делегирования.

  // MARK: GIDSignInDelegates.

    func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: NSError!) {

        showProgressBarIndicator()

        if (error == nil) {

            let params = [
                "access_token"  :   user.authentication.accessToken,
                "email"         :   user.profile.email,
                "name"          :   user.profile.name,
                "photoUrl"      :   user.profile.imageURLWithDimension(100).absoluteString,
                "profile_url"   :   user.profile.imageURLWithDimension(100).absoluteString,
                "provider"      :   Provider.GooglePlus.rawValue,
                "provider_id"   :   user.authentication.clientID
            ]

            AFWrapper.requestPOSTURL(BaseUrl   ApiMethod.SignUp.rawValue, params: params,

                success: {(JSONResponse) -> Void in
                    self.saveDataToDisk(JSONResponse)
                },

                failure: { (error) -> Void in
                    dispatch_async(dispatch_get_main_queue(), {
                        self.removeProgressBarIndicator()
                        JLToast.makeText("Connection Error!").show()
                    })
                }
            )
        } else {
            dispatch_async(dispatch_get_main_queue(), {
                self.removeProgressBarIndicator()
                JLToast.makeText("Error in getting data from Google!").show()
            })

        }
    }
  

и у моего базового контроллера у меня есть следующий метод.

 func showProgressBarIndicator() {

        container.frame = self.view.frame
        container.center = view.center
        container.backgroundColor = UIColor(colorLiteralRed: 255.0, green: 255.0, blue: 255.0, alpha: 0.7)

        let loadingView: UIView = UIView()
        loadingView.frame = CGRectMake(0, 0, 80, 80)
        loadingView.center = view.center
        loadingView.backgroundColor = UIColor(colorLiteralRed: 0.0, green: 0.0, blue: 0.0, alpha: 0.7)
        loadingView.clipsToBounds = true
        loadingView.layer.cornerRadius = 10

        let activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
        activityIndicator.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
        activityIndicator.activityIndicatorViewStyle =
            UIActivityIndicatorViewStyle.WhiteLarge
        activityIndicator.center = CGPointMake(loadingView.frame.size.width / 2,
                                               loadingView.frame.size.height / 2);
        activityIndicator.startAnimating()
        loadingView.addSubview(activityIndicator)

        container.addSubview(loadingView)
        self.view.addSubview(container)
    }


func removeProgressBarIndicator() {
        if !container.isDescendantOfView(self.view) {
            self.container.removeFromSuperview()
        }
    }