在我的iOS应用程序(Objective-C)中,我使用TWTRLogInButton对用户进行身份验证。
按照说明,我开始把它放在 viewcontroller.m
的 viewDidLoad 中TWTRLogInButton *logInButton = [TWTRLogInButton buttonWithLogInCompletion:^(TWTRSession *session, NSError *error) {
///
}];
logInButton.center = self.view.center;
[self.view addSubview:logInButton];
有了所有其他配置,这样就可以了。
但是,为了更好地控制Twitter登录按钮的位置和大小,我想通过界面构建器添加该按钮。
所以,在我的 viewcontroller.h 中我添加了:
@property (retain, nonatomic) IBOutlet TWTRLogInButton *twitterButton;
在我的.xib上(是的,我知道)我添加了一个UIView,将其归类为" TWTRLogInButton"并将其连接到' twitterButton'
然后,在我的 viewcontroller.m 中,在viewDidLoad中,我做了
self.twitterButton = [TWTRLogInButton buttonWithLogInCompletion:^(TWTRSession *session, NSError *error) {
///
}];
但不知何故,当我点击按钮时,在Twitter Dialog被解雇后,不会调用完成。
是什么给出了?
答案 0 :(得分:2)
它在Twitter Community forum中解释并且有意义(没有测试),但是我会在这里发布它以获得StackOverflow的答案。
您的按钮是这样声明的,并且在Storyboard / Xib中存在并连接:
@property (retain, nonatomic) IBOutlet TWTRLogInButton *twitterButton;
来自+(instancetype)buttonWithLogInCompletion:(TWTRLogInCompletion)completion
的{{3}}(有+(instancetype)
)和文档说(我将粗体放入重要部分)
返回新登录按钮,在点击时启动Twitter登录 登录成功或失败时调用完成。
所以当你这样做时:
self.twitterButton = [TWTRLogInButton buttonWithLogInCompletion:^(TWTRSession *session, NSError *error) {
//Code for completionHandler
}];
您正在创建一个全新的对象并覆盖连接到您的xib / storyboard的前一个对象,您在代码与之前在xib / storyboard中设置的代码之间“失去了连接”。
如何修复它,按钮有一个要设置的属性,即完成处理程序。
@property (nonatomic, copy) TWTRLogInCompletion logInCompletion
所以设置它:
[self.twitterButton setLogInCompletion = ^(TWTRSession *session, NSError *error){
//Code for completionHandler
}];