Saya membuat aplikasi yang menggunakan SDK Facebook untuk mengautentikasi pengguna. Saya mencoba untuk mengkonsolidasikan logika facebook di kelas yang terpisah. Berikut adalah kode (dilucuti untuk kesederhanaan):
import Foundation
class FBManager {
class func fbSessionStateChane(fbSession:FBSession!, fbSessionState:FBSessionState, error:NSError?){
//... handling all session states
FBRequestConnection.startForMeWithCompletionHandler { (conn: FBRequestConnection!, result: AnyObject!, error: NSError!) -> Void in
println("Logged in user: \n\(result)");
let storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
let loggedInView: UserViewController = storyboard.instantiateViewControllerWithIdentifier("loggedInView") as UserViewController
loggedInView.result = result;
//todo: segue to the next view???
}
}
}
Saya menggunakan metode kelas di atas untuk memeriksa perubahan status sesi, dan berfungsi dengan baik.
T: Setelah saya memiliki data pengguna, bagaimana saya bisa memisahkan ke tampilan berikutnya dari dalam kelas khusus ini?
EDIT: hanya untuk memperjelas, saya memiliki segue dengan pengenal di storyboard, dan saya mencoba menemukan cara untuk melakukan segue dari kelas yang bukan pengontrol tampilan
performSegue:
?Jawaban:
Jika segue Anda ada di storyboard dengan pengenal segue antara dua tampilan Anda, Anda bisa menyebutnya pemrograman menggunakan:
Untuk versi yang lebih lama:
Anda juga bisa:
Atau jika Anda berada di pengontrol Navigasi:
sumber
Anda dapat menggunakan NSNotification
Tambahkan metode posting di kelas khusus Anda:
Tambahkan pengamat di ViewController Anda:
Tambahkan fungsi di ViewController Anda:
sumber
Jika segue Anda ada di storyboard dengan pengenal segue di antara dua tampilan Anda, Anda bisa menyebutnya pemrograman menggunakan
Jika Anda berada di pengontrol Navigasi
Saya akan merekomendasikan Anda untuk pendekatan kedua menggunakan pengontrol navigasi.
sumber
Anda dapat menggunakan segue seperti ini:
sumber
Swift 3 - Juga berfungsi dengan SpriteKit
Anda dapat menggunakan NSNotification .
Contoh:
1.) Buat segue di storyboard dan beri nama pengenal "segue"
2.) Buat fungsi di ViewController yang Anda pilih.
3.) Dalam ViewDidLoad () dari ViewController Anda, Anda segueing dari membuat pengamat.
Pembaruan - Terakhir kali saya menggunakan ini saya harus mengubah
.addObserver
panggilan ke kode berikut untuk membungkam kesalahan.4.) Dalam ViewController atau Scene yang Anda segueing, tambahkan Metode Post di mana Anda ingin segue dipicu.
Pembaruan - Terakhir kali saya menggunakan ini saya harus mengubah
.post
panggilan ke kode berikut untuk membungkam kesalahan.sumber
NotificationCenter.default.addObserver(self, selector: #selector(goToDifferentView), name: NSNotification.Name(rawValue: "segue"), object: nil)
Apa yang ingin Anda lakukan sangat penting untuk pengujian unit. Pada dasarnya Anda perlu membuat fungsi lokal kecil di view controller. Beri nama fungsi apa saja, cukup sertakan
performSegueWithIndentifier
.Selanjutnya, ubah kelas utilitas Anda
FBManager
untuk menyertakan inisialisasi yang mengambil argumen fungsi dan variabel untuk menahan fungsi ViewController yang melakukan segue.(Kenyamanan init memungkinkan Anda untuk menggunakan ini dalam pengujian unit tanpa mengeksekusi segue.)
Akhirnya, di mana Anda memiliki // todo: segue ke tampilan selanjutnya ???, letakkan sesuatu di sepanjang baris:
Dalam pengujian unit Anda, Anda dapat memanggilnya sebagai:
di mana doThatThing adalah fbessionstatechange Anda dan
UtilClass
FBManager.Untuk kode Anda yang sebenarnya,
localFunc
kirimkan (tidak ada tanda kurung) ke kelas FBManager.sumber
Ini berhasil untuk saya.
Pertama-tama berikan view controller ID Storyboard Anda di dalam inspektur identitas. Kemudian gunakan kode contoh berikut (memastikan kelas, nama papan cerita dan ID papan cerita cocok dengan yang Anda gunakan):
Untuk perincian lebih lanjut, lihat http://sketchytech.blogspot.com/2012/11/instantiate-view-controller-using.html keinginan terbaik
sumber
Anda dapat melakukan hal ini menggunakan
performSegueWithIdentifier
fungsi.Sintaks:
Contoh:
sumber
Pilihan lain adalah menggunakan modal segue
LANGKAH 1: Pergi ke storyboard, dan berikan View Controller ID Storyboard . Anda dapat menemukan tempat untuk mengubah ID storyboard di Inspektur Identitas di sebelah kanan. Mari kita memanggil ID storyboard
ModalViewController
LANGKAH 2: Buka pengontrol tampilan 'pengirim' (sebut saja
ViewController
) dan tambahkan kode ini ke dalamnyaPerhatikan bahwa View Controller yang ingin kita buka juga dipanggil
ModalViewController
LANGKAH 3: Untuk menutup ModalViewController, tambahkan ini ke sana
sumber
Ini bekerja untuk saya:
sumber