当前位置: 首页 > 面试题库 >

如何更改FBSDKLoginButton iOS 8.3 / Swift 1.2的默认设计?

沈鸿光
2023-03-14
问题内容

我目前正在开发App,我需要更改Facebook
SDK提供的Facebook按钮的默认设计。我成功地使提供的按钮透明,并将其粘贴在设计视图上方,并且效果很好(现在设计已经匹配,Facebook
SDK按钮的功能也很好)。我这样做之后出现了问题,因为按钮丢失了它的Ui效果(单击时未突出显示)。如果有人可以帮助我,请给此设计的按钮添加突出显示效果。让我们澄清一下:我已经将UIView设计为按钮,在其上面放置了一个透明的Facebook
SDK按钮,结果是我的设计形状和Facebook按钮的功能同时出现,但失​​去了:单击时没有突出显示效果。


问题答案:

我尝试了以下代码,它以正确的方式提供了功能。但是,单击按钮后,我未能给按钮赋予突出显示效果。这是代码:

{
    if (FBSDKAccessToken.currentAccessToken() != nil)
        {
            // if user logged in then handleTap func will run instead of button functionality
            let tap = UITapGestureRecognizer(target: self, action: "handleTap:")
            self.btnSignUpwithFaceBook.addGestureRecognizer(tap)

        }

        else
        {
            let loginView : FBSDKLoginButton = FBSDKLoginButton()
            self.view.addSubview(loginView)
            loginView.center = self.btnSignUpwithFaceBook.center
            loginView.frame.size.width = self.btnSignUpwithFaceBook.frame.width
            loginView.frame.size.height = self.btnSignUpwithFaceBook.frame.height
            loginView.frame.origin.x = self.btnSignUpwithFaceBook.frame.origin.x
            loginView.frame.origin.y = self.btnSignUpwithFaceBook.frame.origin.y

            for subView in loginView.subviews
            {
                subView.removeFromSuperview()
            }
            loginView.layer.shadowColor = UIColor.clearColor().CGColor

            loginView.setBackgroundImage(nil, forState: UIControlState.Normal)
            loginView.setBackgroundImage(nil, forState: UIControlState.Application)
            loginView.setBackgroundImage(nil, forState: UIControlState.allZeros)
            loginView.setBackgroundImage(nil, forState: UIControlState.Highlighted)
            loginView.setBackgroundImage(nil, forState: UIControlState.Reserved)
            loginView.setBackgroundImage(nil, forState: UIControlState.Selected)

            loginView.setImage(nil, forState: UIControlState.Normal)
            loginView.setImage(nil, forState: UIControlState.Application)
            loginView.setImage(nil, forState: UIControlState.allZeros)
            loginView.setImage(nil, forState: UIControlState.Highlighted)
            loginView.setImage(nil, forState: UIControlState.Reserved)
            loginView.setImage(nil, forState: UIControlState.Selected)

            loginView.backgroundColor = UIColor.clearColor()
            // just for test
            self.btnSignUpwithFaceBook.layer.borderWidth = 1
            self.btnSignUpwithFaceBook.layer.borderColor = UIColor.whiteColor().CGColor
            loginView.layer.backgroundColor = UIColor.clearColor().CGColor

            loginView.readPermissions = ["public_profile", "email", "user_friends"]
            loginView.delegate = self
            loginView.setTranslatesAutoresizingMaskIntoConstraints(false)

            var constX = NSLayoutConstraint(item: loginView, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: self.btnSignUpwithFaceBook, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0)
            view.addConstraint(constX)

            var constY = NSLayoutConstraint(item: loginView, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: self.btnSignUpwithFaceBook, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0)
            view.addConstraint(constY)

            let views = ["loginView": loginView]

            var constH = NSLayoutConstraint.constraintsWithVisualFormat("H:[loginView(57)]", options: NSLayoutFormatOptions(0), metrics: nil, views: views)
            view.addConstraints(constH)


            var constW = NSLayoutConstraint.constraintsWithVisualFormat("V:[loginView(281)]", options: NSLayoutFormatOptions(0), metrics: nil, views: views)

            view.addConstraints(constW)

}

实际上,主要问题是facebookLogInButton是FBSDK的自定义类,而swift并不将其视为uiButton,这就是为什么没有突出显示属性的原因。因此,我希望您的帮助人员能够找到它的要点是找到一种方法,使facebookLoginButton迅速被视为uiButton。



 类似资料:
  • 问题内容: 我知道如何使用dns设置创建新的docker-machine 但是已经有一个“默认”虚拟机,是否有办法更改其dns? 我在线阅读了使用boot2docker进行此操作的方法,但该工具已过时,而docker- machine已将其替换。不幸的是,它太新了,以至于我在网上找不到很多东西。 问题答案: 转到并将您自己的DNS服务器添加到并重新启动docker计算机。

  • 问题内容: 尝试更改列的数据类型并设置新的默认值时遇到以下错误: 错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以在第1行的’VARCHAR(255)NOT NULL SET DEFAULT’{}’‘附近使用正确的语法 问题答案: 同样的第二种可能性(感谢juergen_d):

  • 在尝试更改列的数据类型并设置新的默认值时,我遇到以下错误: 错误1064(42000):您的SQL语法中有错误;查看与您的MySQL server版本相对应的手册,以了解第1行“varchar(255)NOT NULL SET DEFAULT”{}“附近使用的正确语法

  • 问题内容: 如何更改默认的Virtualenvwrapper提示符?默认情况下,使用“ workon <name_of_env>”之类的命令在特定的虚拟环境上工作,会将virtualenv的名称添加到提示中。如果您未使用默认命令提示符,则此方法可能效果不佳。 问题答案: 默认情况下,当使用命令“ workon ”切换到virtualenv时,virtualenvwrapper将在字符串(( ))前

  • 问题内容: 我使用IntelliJ IDEA作为开发环境,并使用Maven进行依赖项管理。我经常在IDEA之外构建我的项目结构(目录,poms等),然后使用将该项目导入。这很好用,除了在poms中我指定maven-compiler-plugin应该使用JDK 1.6,并且在导入时,IDEA通知我和,然后提示重新加载项目。这很烦人,因为我总是使用相同的JDK版本。 如何更改IntelliJ IDEA

  • xampp中的php.ini文件位于此处: phpinfo包含以下信息: 配置文件(php.ini)路径C:\WINDOWS 已加载的配置文件(无) 扫描此目录以获取更多信息。ini文件(无) 如何更改目录?