2012-10-14 22 views
11

Xcode 4.5 kullanarak storyboard'ları kullanarak bir uygulama geliştirdim. Uygulamanın ilk başlatılışında, ilk görüntü denetleyicisinin devam etmek için kabul edilmesi gereken şartlar ve koşullar ile görünmesini istiyorum. Bundan sonra, uygulamanın ilk görüntü denetleyiciyi başlatmasını ve atlamasını ve ikincisine geçmesini istiyorum.Yalnızca ilk lansmanında nasıl bir görünüm gösterebilirim?

ben etkisiyle NSUserDefaults sınıfını ve bir şeyler kullanmak zorunda biliyorum: if ([[NSUserDefaults standart ...] boolForKey: @ "iHaveAcceptedTheTerms"])

Ama bu sınıfı kullanılan hiç önce bu kodu nasıl uygulayacağınız konusunda hiçbir fikriniz yok. Birisi, bunun nasıl yapılacağının ayrıntılarını paylaşabilir mi?

cevap

10

Sen AppDelegate içinde koymak:

NSUserDefaults * standardUserDefaults = [NSUserDefaults standardUserDefaults]; 

BOOL isAccepted = [standardUserDefaults boolForKey:@"iHaveAcceptedTheTerms"]; 

if (!isAccepted) { 
    [self presentViewController:YOUR_TERMS_CONTROLLER animated:YES completion:nil]; 
} else { 
    [self.navigationController pushViewController:YOUR_NORMAL_CONTROLLER animated:YES]; 
} 

Dont terimleri denetleyicisindeki kullanıcı tepkisini kaydetmeyi unutmayın :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

//first-time ever defaults check and set 
if([[NSUserDefaults standardUserDefaults] boolForKey:@"TermsAccepted"]!=YES) 
{ 
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"TermsAccepted"]; 
} 

rootViewController şartlarını ve koşullarını kabul etmenin bir yoludur. Bu soruyu tutmak çıkarları

if(termsaccepted){ 
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"TermsAccepted"]; 
} 
+0

Ok teşekkürler. "Şartları göster" seçeneğine karşı uygulamanın "normal şekilde devam etmesini" nasıl sağlayacağınızı ayrıntılı bir şekilde açıklayabilir misiniz? – jac300

+0

Bu size kalmış. Örneğin, kullanıcının uygulamayı ilk kez başlatması durumunda, viewController (ya da yalnızca tek bir VC kullanıyorsanız, yalnızca terimleri görüntüleyen) gösterilir. Terimler kabul edildiğinde, onu kapatır ve bahsettiğiniz gibi ikinci sırayı alırsınız. Bu alexandresoli tarafından açıklandığı gibi kök VC tarafından yapılabilir. Bir dahaki sefere kullanıcı geldiğinde, kök VC hemen ikinci VC'yi gösterir. – NightCoder

+0

Teşekkürler. Evet, kavramı anlıyorum, ancak kodu anlayamıyorum. Öyleyse terimlerin kabul edildiğini söyleyelim ... programı "mevcut terimleri görmek ve bir sonrakine geçmek" için söyleyen kodu nasıl oluşturabilirim? Başka bir deyişle, alexandresoli'nin kod parçasına bakarak: [self presentViewController: YOUR_TERMS_CONTROLLER animasyonlu: EVET tamamlanması: yok]; "YOUR_TERMS_CONTROLLER" nedir, bir görünüm denetleyicisini nasıl etiketlerim ve programa göre nasıl başvurabilirim? – jac300

4

Bu ilk görünüm veya temsilci bu gibi görünecektir:

[standardUserDefaults setBool:YES forKey:@"iHaveAcceptedTheTerms"]; 
+0

Tamam, böylece "terms" denetim denetleyicisinin viewDidLoad öğesindeki ilk kod bloğunu yerleştirdim, doğru mu? Ama sonra, görünüm denetleyicisinin adını nasıl ayarlayabilirim ... başka bir deyişle, "YOUR_TERMS_CONTROLLER" adını tanımak için nasıl alabilirim? – jac300

+0

YOUR_TERMS_CONTROLLER, kullanıcının şartları kabul ettikten sonra görüntülenen denetleyicisidir. Kodu koymak için doğru yer, şartlar denetleyicinizi çağıran görünümün içinde yer alır, şartları çağırmaktan sorumlu değildir. Daha fazla şüpheniz varsa, sorunuzu düzenlemeye ve bazı kodlar koymaya çalışın. – alexandresoli

12

:

kabul
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"TermsAccepted"]){ 
    //proceed with app normally 
} 
else{ 
//show terms 
} 

, aşağıdaki kod varsayılan ayarları değişecek: terimler böyle örneğin kabul edilir olmadığını Sen kontrol etmek zorunda kalacak up-to-date, burada kabul edilen cevabın bir Swift sürümüdür. senin App Delegesi yılında


ADIM 1

, aşağıdaki işlevi ekleyin. (Bool değerlerden oluşan varsayılan olarak yanlış olduğu gibi) bu ilk fırlatma ise

func applicationDidFinishLaunching(application: UIApplication) { 
    if !NSUserDefaults.standardUserDefaults().boolForKey("TermsAccepted") { 
     NSUserDefaults.standardUserDefaults().setBool(false, forKey: "TermsAccepted") 
    } 
} 

Bu

esasen yanlış şekilde TermsAccepted Bool ayarlayacaktır.


ADIM 2 kök görünümü denetleyicisi (uygulama başlatıldığında yükleyen görünümü denetleyicisi), bir terim olarak kabul edilip edilmediğini görmek için bir yol ya da değil ve hareket olmalıdır yılında

buna göre.

Aşağıdaki işlevi ekleyin.


ADIM 3

kullanıcı şartlarınızı kabul ettikten sonra

override func viewDidAppear(animated: Bool) { 
    if NSUserDefaults.standardUserDefaults().boolForKey("TermsAccepted") { 
     // Terms have been accepted, proceed as normal 
    } else { 
     // Terms have not been accepted. Show terms (perhaps using performSegueWithIdentifier) 
    } 
} 

, sen gerçek için Bool TermsAccepted senin değiştirmek istiyorum. Dolayısıyla, terimlerin kabulünü ele alan yöntemin gövdesinde, aşağıdaki satırı ekleyin.

NSUserDefaults.standardUserDefaults().setBool(true, forKey: "TermsAccepted") 

umarım bu yardımcı olur!

Loic

+0

Benim için mükemmel çalışıyor. BTW Uygulamanın yerine DIDFinishLaunching yerine didFinishLaunchingWithOptions'ta ilk yöntemi çağırsam sorun olur mu? Çalışması gereken +1 – CAN

+0

@CAN da desteklendi! :) –

+0

App Delege'imde 'Sinyal SIGABRT 'alıyorum. Neler oluyor? –

5

Swift 3 Versiyon AppDelegate.swift yılında

: Kök görünüm denetleyicisinde

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    if !UserDefaults.standard.bool(forKey: "Walkthrough") { 
     UserDefaults.standard.set(false, forKey: "Walkthrough") 
    } 
} 

:

override func viewDidLoad() { 
    super.viewDidLoad() 
    if UserDefaults.standard.bool(forKey: "Walkthrough") { 
     // Terms have been accepted, proceed as normal    
    } else { 
     // Terms have not been accepted. Show terms (perhaps using 
    } 
} 

terimler kabul edilmiş veya öğretici geçiş tamamlandı:

UserDefaults.standard.set(true, forKey: "Walkthrough") 
İlgili konular