2016-04-02 4 views
-1

Я использовал ткань для импорта TwitterKit в мой проект Swift XCode. Я хочу создать кнопку входа в Twitter, используя UIView, чтобы я мог раскрыть ее в раскадровке.Twitter Кнопка входа в систему iOS с помощью раскадровки?

Вот что я сделал:

1) Я создал UIView в раскадровке и установить класс TWTRLogInButton. TWTRLogInButton Class

2) На мой взгляд, контроллер, я создал IBOutlet.

@IBOutlet var twitterLoginView: TWTRLogInButton! 

3) Я изменил образец кода из Ткани в соответствии с моей настройкой. Вот исходный код из ткани, которая идет в моем viewDidLoad():

 let logInButton = TWTRLogInButton { (session, error) in 
     if let unwrappedSession = session { 
      let alert = UIAlertController(title: "Logged In", 
       message: "User \(unwrappedSession.userName) has logged in", 
       preferredStyle: UIAlertControllerStyle.Alert 
      ) 
      alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) 
      self.presentViewController(alert, animated: true, completion: nil) 
     } else { 
      NSLog("Login error: %@", error!.localizedDescription); 
     } 
    } 

    // TODO: Change where the log in button is positioned in your view 
    logInButton.center = self.view.center 
    self.view.addSubview(logInButton) 

Вот мой отредактированный код ссылки на мой взгляд, вместо:

twitterLoginView = TWTRLogInButton { (session, error) in 
     if let unwrappedSession = session { 
      let alert = UIAlertController(title: "Logged In", 
       message: "User \(unwrappedSession.userName) has logged in", 
       preferredStyle: UIAlertControllerStyle.Alert 
      ) 
      alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) 
      self.presentViewController(alert, animated: true, completion: nil) 
     } else { 
      print("Login Error, \(error?.localizedDescription)") 
     } 
    } 

XCode принимает это, но когда я запускаю приложение, я получаю следующие ошибки в журналах, когда я выбираю Twitter Войти Кнопка:

TWTRLogInButton был создан без каких-либо completionBlock набор

Я не уверен, почему это происходит, у кого есть идеи?

+0

Где вы звонили в twitterLoginView? – ridvankucuk

+0

Часть I, помеченная как «мой отредактированный код», была указана в 'viewDidLoad'. Ткань дает мне некоторый код для добавления в viewDidLoad, и я попытался немного его модифицировать, чтобы тот факт, что я уже добавил кнопку на раскадровке. Нужно ли мне звонить в другое место? – BensTechTips

+0

Вы получите свое предупреждение, потому что создали свою кнопку как IBOutlet. Вы пытаетесь переопределить переменную. Если вы создадите его programitacally, вы не получите ошибки в этом случае. – ridvankucuk

ответ

1

buttonWithLogInCompletion есть класс способ. Вы создаете свой IBOutlet в своем раскадровке, не вызывая метод экземпляра. Переопределение это дает это предупреждение. Ваш код работает, кстати. Если вы не хотите видеть, что предупреждение вы должны создать кнопку в коде программно, как Вы написали в своем вопросе:

let logInButton = TWTRLogInButton { (session, error) in 
    if let unwrappedSession = session { 
     let alert = UIAlertController(title: "Logged In", 
      message: "User \(unwrappedSession.userName) has logged in", 
      preferredStyle: UIAlertControllerStyle.Alert 
     ) 
     alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) 
     self.presentViewController(alert, animated: true, completion: nil) 
    } else { 
     NSLog("Login error: %@", error!.localizedDescription); 
    } 
} 

// TODO: Change where the log in button is positioned in your view 
logInButton.center = self.view.center 
self.view.addSubview(logInButton) 

Вы можете установить положение кнопки с autolayout в коде также.

+0

Спасибо за ваш ответ. Полагаю, что это будет в коде! :) Я никогда не делал autolayout с использованием кода раньше, поэтому попробуйте его сейчас, используя это руководство из Apple Documentation: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/ProgrammaticallyCreatingConstraints. html - Я дам вам знать, как я поеду! Большое спасибо за ваше время! – BensTechTips

+0

Я сказал в своем ответе. Ваш код работает. Получение предупреждения не означает, что ваш код неверен. Создание IBOutlet вызывает базовый init(). В вашем коде вы просто переопределяете его. – ridvankucuk

+0

Итак, что я делаю, создавая IBOutlet, создается новый экземпляр кнопки. В viewDidLoad я перекрываю блок завершения для того экземпляра, который я создал? Это верно? Извините за это, я думаю, что просматриваю это с неправильного угла! – BensTechTips

Смежные вопросы