TWTRLogInButton(推特登录按钮)设置标题导致文字重叠

TWTRLogInButton (Twitter Login Button) set title causes overlapping text

TWTRLoginButton 应该继承自 UIButton,但是当我使用 setTitle:forState 时,我最终会得到重叠的文本,如下所示: 我在做什么:

@IBAction func twitterLoginButtonPressed(sender: TWTRLogInButton) {

  twitterLoginButton.logInCompletion = {(session:TWTRSession!, error:NSError!) -> Void in

    if error != nil {
        println(error)
    }

    if session != nil {
        self.session = session
        self.twitterLoginButton.setTitle("Logged in as \(session.userName)", forState: .Normal)
    }
  }
}

这就像他们在视图层次结构中添加了标签,而不是使用 built-in API。但是 the docs 不要说任何关于这个或如何使用它的事情...

他们会按照您的想法为按钮添加自定义标签。并且没有 API 来自定义它。如果真要做,需要深挖视图层级。

点赞:

twitterLoginButton.logInCompletion = {(session:TWTRSession!, error:NSError!) -> Void in
  if error != nil {
      println(error)
  }

  if session != nil {
      self.session = session

      // Digging the view hierarchy
      var view = twitterLoginButton.subviews.last as UIView
      var label = view.subviews.first as UILabel
      label.text = "Logged in as \(session.userName)"
  }
}    

不言而喻,如果视图层次结构将来发生变化,它将不起作用。

@构建成功

用一种非常直接的方式是可能的!!!甚至在 fabric(twitter mobile SDK) 文档中都有记录。

您可以自定义 TWTRLogInButton 的外观和感觉 - 这是 Twitter 本身提供的登录按钮。但您也可以拥有自己的。您只需要在您自己创建的按钮上执行登录事件的完成处理程序。

请遵循以下代码片段:

-(IBAction)btnLoginWithTwitterDidTap:(id)sender {
self.whichSocial = TW_LOGIN;
[[Twitter sharedInstance]logInWithCompletion:^(TWTRSession* session, NSError* error) {
    if (session) {
        NSLog(@"signed in as %@", [session userName]);
    } else {
        NSLog(@"error: %@", [error localizedDescription]);
    }
}];
}

就这么简单

礼貌:Customize twitter sign in button

我做了一个变通方法来编辑 TWTRLoginButton 字体...我想您也可以更改文本...

for sub in twitterLoginButton.subviews {

    for s in sub.subviews {

        if s is UILabel {

            (s as! UILabel).font = ... font ...
            (s as! UILabel).text = ... text ...
        }
    }
}