2012-02-26 36 views
28

Tweetbot và Clear show xuất hiện lần đầu tiên trên màn hình hướng dẫn nhỏ về cách ứng dụng hoạt động. Màn hình với hướng dẫn nhỏ chỉ bật lên khi khởi động ứng dụng đầu tiên (1 lần)Hiển thị màn hình khi khởi chạy lần đầu tiên chỉ trong iOS

Làm cách nào và với những gì tôi có thể tạo ra một thứ tương tự? Bất cứ ai có thể đẩy tôi đi đúng hướng không?

Xem tôi có nghĩa là:

enter image description here

Trả lời

33

Trong viewDidLoad của bạn:

if (![@"1" isEqualToString:[[NSUserDefaults standardUserDefaults] 
           objectForKey:@"aValue"]]) { 
    [[NSUserDefaults standardUserDefaults] setValue:@"1" forKey:@"aValue"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

    //Action here 

} 
+8

Tôi không hiểu ý bạn là gì: 'là viết tắt của bao nhiêu lần bạn sẽ thấy hành động. Bạn chỉ cần thiết lập một chuỗi, nếu bạn thay đổi điều này thành bất kỳ chuỗi nào, bao gồm 2, 3 vv, nó sẽ vẫn chỉ kích hoạt một lần. – thepaperboy

+0

Vẫn hoạt động hoàn hảo trên iOS 9. Trong trường hợp của tôi, tôi đã sử dụng tính năng này cho màn hình giật gân của mình. Khó khăn của tôi là, tôi đã sử dụng cùng một màn hình cho màn hình giật gân và nav chính của tôi, sau khi chạm vào khung nhìn menu bên trái của tôi, nó sẽ trình bày giật gân của tôi một lần nữa. Giải quyết rằng bằng cách đặt [[NSUserDefaults standardUserDefaults] setValue: @ "" forKey: @ "aValue"]; trong didFinishLaunchingWithOptions của tôi. Vì vậy, nó đặt lại khi khởi chạy ứng dụng. Cám ơn vì cái này. – ChrisOSX

53

Tôi giả định bởi Xcode bạn thực sự có nghĩa là iOS.

Những gì bạn cần làm là sử dụng lớp NSUserDefaults để lưu trữ cờ cho biết người dùng đã xem màn hình hướng dẫn chưa.

Khi ứng dụng của bạn tải đầu tiên (hoặc tại thời điểm bạn muốn quyết định có hay không để hiển thị màn hình hướng dẫn), làm một cái gì đó như thế này:

if(![[NSUserDefaults standardUserDefaults] boolForKey:@"hasSeenTutorial"]) 
    [self displayTutorial]; 

này kiểm tra NSUserDefaults lưu lại cho người sử dụng hiện tại cho một giá trị có tên là "hasSeenTutorial", chưa tồn tại. Vì nó không tồn tại, nó sẽ gọi displayTutorial. displayTutorial đề cập đến phương pháp của bạn để tạo chế độ xem hướng dẫn. Bạn có thể tìm ra phần đó.

Sau đó, khi người dùng đóng màn hình hướng dẫn:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"hasSeenTutorial"]; 

Đó giá trị sẽ được lưu trong hồ sơ người dùng của bạn, có nghĩa là lần sau nó sẽ kiểm tra nó, nó sẽ là sự thật, vì vậy displayTutorial sẽ không được gọi là.

+12

Bạn quên quá 'đồng bộ hóa'. – Nathan

+6

Nếu bạn kiểm tra tài liệu, "phương pháp này được tự động gọi trong khoảng thời gian định kỳ", vì vậy không cần thiết trừ khi chương trình sắp thoát hoặc có một số hiện tượng khác cấm gọi số – Jeremy

3

Khởi tạo giá trị mặc định sử dụng của bạn với một BOOL, một cái gì đó gọi là instructionsSeen (hoặc bất cứ điều gì bạn muốn) và đặt nó vào NO trong phương thức khởi App đại biểu của bạn .. Trong ứng dụng của bạn, kiểm tra giá trị này và nếu nó là NO hiển thị màn hình hướng dẫn của bạn . Là một phần của việc hiển thị và hiển thị màn hình này, hãy đặt instructionsSeen thành YES và lưu trữ trong cài đặt mặc định của bạn.

Bằng cách này, màn hình demo sẽ chỉ hiển thị khi ra mắt lần đầu tiên, trừ khi người dùng gỡ cài đặt và cài đặt lại ứng dụng.

Bạn cũng có thể hiển thị bản trình diễn cho một số lượng nhỏ các lần ra mắt (ví dụ 3). Trong trường hợp này, không sử dụng số BOOL sử dụng số và tăng số đó thay thế.

9

Chắc chắn, nếu chúng ta muốn nói cho người dùng một cái gì đó về các tính năng sau khi cập nhật (không chỉ ứng dụng ra mắt lần đầu tiên), các giải pháp dưới đây có thể là phù hợp.

Trong viewDidLoad của bạn:

NSString *currentBundleVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; 
NSString *previousBundleVersion = [[NSUserDefaults standardUserDefaults] objectForKey:@"PreviousBundleVersion"]; 

if (![currentBundleVersion isEqualToString:previousBundleVersion]) { 
    // Here you can initialize your introduction view and present it! 
} 

Khi người dùng đóng giới thiệu:

NSString *currentBundleVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];  
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; 

if (standardUserDefaults) { 
    [standardUserDefaults setObject:currentBundleVersion forKey:@"PreviousBundleVersion"]; 
    [standardUserDefaults synchronize]; 
} 

Trong phiên bản chữ ứng dụng bó lưu trữ trong standardUserDefaults của bạn sẽ được khác với phiên bản gói hiện chỉ sau khi cập nhật và chỉ hiển thị một lần cũng như lúc khởi chạy đầu tiên.

0

phiên bản Swift:

if !(NSUserDefaults.standardUserDefaults().boolForKey("seenTutorial")) { 
      //Tutorial part 
      NSUserDefaults.standardUserDefaults().setBool(true, forKey: "seenTutorial") 
     } 
1
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
if (![defaults objectForKey:@"firstRun"]) { 
    [defaults setObject:[NSDate date] forKey:@"firstRun"]; 
    [self displayTutorial]; 
} 
+1

@ChrisLoonam Tôi đã sửa đổi mã để lưu trạng thái trong NSUserDefaults. – Venkat

0

Mọi người đều đang làm này phức tạp hơn và vauge hơn nó cần phải được ... giải pháp hoàn chỉnh đơn giản.

Trong viewDidLoad:

if ([[NSUserDefaults standardUserDefaults] boolForKey:@"FirstLoadKey"]) { 
    self.imageView.hidden = YES; 
}else{ 
    self.imageView.hidden = NO; 
    [[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"FirstLoadKey"]; 
    [[NSUserDefaults standardUserDefaults]synchronize]; 
} 
+0

Đây không phải là chế độ xem hình ảnh ... Xem có một ViewPager ở cuối màn hình ☻☻☻☻. –

1

Version Xamarin.iOS trong appdelegate:

UIStoryboard storyboard = UIStoryboard.FromName("Main", null); 

     if (NSUserDefaults.StandardUserDefaults.BoolForKey ("hasSeenTutorial") == false) { 
      UIViewController vc = storyboard.InstantiateViewController ("StartPageViewController"); 
      this.Window.RootViewController = vc; 

     } else { 
      UIViewController vc = storyboard.InstantiateViewController ("NonStartPageViewController"); 
      this.Window.RootViewController = vc; 

     } 

     this.Window.MakeKeyAndVisible(); 

Trong StartPageViewController của tôi, tôi có một nút mà đặt NSUserDefaults true, vì vậy thời gian tiếp theo nó chạy, nó sẽ bắt đầu với NonStartPageViewController:

partial void RegisterButton_TouchUpInside (UIButton sender) 
    { 
     NSUserDefaults.StandardUserDefaults.SetBool(true,"hasSeenTutorial"); 
     NSUserDefaults.StandardUserDefaults.Synchronize(); 
    } 
+0

Tốt đẹp, nhưng bạn sẽ đặt mã kiểm tra "hasSeenTutorial" trong AppDelegate ở đâu? Tôi không tự tạo nhanh bảng phân cảnh, nó được thực hiện cho tôi dựa trên cài đặt dự án. – Glaucus

+0

Ok, không bao giờ. Tôi đặt nó vào phương thức FinishedLaunching() và xóa bỏ "Giao diện chính" trong các thiết lập dự án. – Glaucus

Các vấn đề liên quan