在我的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对话框”后,不会调用完成。
是什么赋予了?
最佳答案
它在Twitter Community forum中进行了解释并且很有意义(没有对其进行测试),但是我将其发布在此处以在StackOverflow上获得答案。
这样声明您的按钮,并且该按钮已存在并连接在Storyboard / Xib中:
@property (retain, nonatomic) IBOutlet TWTRLogInButton *twitterButton;
从
+(instancetype)buttonWithLogInCompletion:(TWTRLogInCompletion)completion
的doc(存在+(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
}];
关于ios - Twitter登录按钮出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48283513/