ইউআইএলআর্টভিউ প্রথম আইওএস 9 কে অবমূল্যায়ন করেছে


108

আমি ইউআইএলআরলেটভিউয়ের পরিবর্তে ইউআইআইএলআরএল্টকন্ট্রোলার ব্যবহারের বিভিন্ন উপায় চেষ্টা করেছি। আমি বেশ কয়েকটি উপায়ে চেষ্টা করেছি কিন্তু সতর্কতা কাজটি করতে পারি না। এখানে আমার কোড যা আইওএস 8 এবং আইওএস 9 এ সূক্ষ্মভাবে কাজ করে তবে অবহিত পতাকা সহ প্রদর্শিত হচ্ছে। আমি নীচে মার্জিত পরামর্শ চেষ্টা করেছি কিন্তু আমি এই প্রসঙ্গে এটি কাজ করতে পারবেন না। আমাকে আমার অ্যাপ্লিকেশনটি জমা দিতে হবে এবং এটি সম্বোধনের শেষ জিনিস। আরও কোনও পরামর্শের জন্য আপনাকে ধন্যবাদ। আমি নবাগত।

#pragma mark - BUTTONS ================================
- (IBAction)showModesAction:(id)sender {
NSLog(@"iapMade: %d", iapMade3);

// IAP MADE ! ===========================================
if (!iapMade3) {

    //start game here
    gamePlaysCount++;
    [[NSUserDefaults standardUserDefaults]setInteger:gamePlaysCount forKey:@"gamePlaysCount"];
    NSLog(@"playsCount: %ld", (long)gamePlaysCount);

    if (gamePlaysCount >= 4) {
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Basic"
                                                     message: THREE_PLAYS_LIMIT_MESSAGE
                                                    delegate:self
                                           cancelButtonTitle:@"Yes, please"
                                           otherButtonTitles:@"No, thanks", nil];
       [alert show];

        NSString *path = [[NSBundle mainBundle] pathForResource:@"cow" ofType:@"wav"];
        _pop =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
        [_pop play];
        [self dismissViewControllerAnimated:true completion:nil];

    } else {
        if (gamePlaysCount == 1)  {
            // Create & store the next 5 mins when player gets 3 more lives
            nextDateToPlay = [[NSDate date] dateByAddingTimeInterval:60*60*0.1];
            NSLog(@"CURRENT DATE: %@", [NSDate date]);
            NSLog(@"NEXT DAY: %@", nextDateToPlay);
            [[NSUserDefaults standardUserDefaults]setObject: nextDateToPlay    forKey:@"nextDateToPlay"];
            NSLog(@"nextDateToPlay: %@", nextDateToPlay);

            UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Basic"
                                                           message:  THREE_PLAYS_LIMIT_MESSAGE2
                                                          delegate:self
                                                 cancelButtonTitle:@"Got it!"
                                                 otherButtonTitles:@"Start", nil];
            [alert show];
        } else {

            if (gamePlaysCount == 3)  {
                UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Basic"
                                                               message: THREE_PLAYS_LIMIT_MESSAGE3
                                                              delegate:self
                                                     cancelButtonTitle:@"Yep, I Know!"
                                                     otherButtonTitles:@"Start", nil];
                [alert show];
            }
        }
    }
}

}

// IAP NOT MADE =============================

#pragma mark - ALERTVIEW DELEGATE ============================

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {

if ([[alertView buttonTitleAtIndex:buttonIndex] isEqualToString:@"Yes, please"]) {

    UIStoryboard *storyboard = self.storyboard;
    MenuViewController *svc = [storyboard instantiateViewControllerWithIdentifier:@"Store"];
    svc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentViewController:svc animated:YES completion:nil];

        }

}

1
প্রশ্ন পরিষ্কার নয়। এটা আপনি চান যে কি ?
মৌচেগ

ইউআইআইএলআর্টভিউ আইওএস 9-এ অবমুক্ত করা হয়েছে এবং এর পরিবর্তে আমাদের ইউআইএলআরল্টকন্ট্রোলার স্টিল অ্যালার্টের পছন্দসই স্টাইল সহ ইউআইআইএলআরএল্টকন্ট্রোলার ব্যবহার করতে হবে। তবে আমি যখন ইউআইএলআরএল্টকন্ট্রোলার পদ্ধতি ব্যবহার করি তখন সতর্কতাটি দেখা যায় না। আমি নীচের সমাধানটি চেষ্টা করেছি, তবে এখনও সতর্কতা প্রদর্শনটি দেখায় না .. আপনাকে ধন্যবাদ ..
বুक्स

ঠিক আছে. আপনি কি করতে পারেন এবং কী কাজ করে না তা দেখাতে পারেন?
মৌচেগ

1
উপস্থাপনের পরে আপনি কল করছেন [স্ব বরখাস্ত ভিউকন্ট্রোলারএনিমেটেড: সত্য সমাপ্তি: শূন্য]; যা সতর্কতা নিয়ন্ত্রককে বরখাস্ত করবে
আদনান আফতাব

1
এই বিবেচনায় এটি একটি গুরুত্বপূর্ণ প্রশ্ন যে ইউআইএলআর্টকন্ট্রোলারটি বেশ নতুন এবং অনেক বিকাশকারী হ্রাস সম্পর্কে চিন্তিত হবে। অযৌক্তিক ডাউন ভোটগুলি একটি কার্যকর প্রশ্নের উপর খারাপ প্রভাব ফেলে। যারা প্রশ্নটিতে ভোট দিয়েছেন তাদের সম্পাদনা করার পরে তাদের ভোটটি পরিবর্তন করা উচিত ছিল। তবে তারপরে, "ডাউন ভোট ট্রলস" যারা তাদের ডাউন ভোটের জন্য ব্যাজ পেয়েছেন তারা যাইহোক এটি করবেন না। এসও মডারেটরদের এটি ঠিক করার একটি উপায় থাকা উচিত।
টোটোরো

উত্তর:


237

আইওএস 8 থেকে অ্যাপল নতুন UIAlertControllerক্লাস সরবরাহ করে যা আপনি ইউআইআইএলআর্টভিউয়ের পরিবর্তে ব্যবহার করতে পারেন যা এখন অবনতিযুক্ত, এটি অবহেলা বার্তায় আরও বলা হয়েছে:

ইউআইএলআর্টভিউ অবহিত করা হয়েছে। পরিবর্তে ইউআইএএলআরএল্টকন্ট্রোলার স্টাইলআলার্টের পছন্দসই স্টাইলের সাথে ইউআইআইএলআরএল্টকন্ট্রোলার ব্যবহার করুন

সুতরাং আপনার এই জাতীয় কিছু ব্যবহার করা উচিত

UIAlertController * alert = [UIAlertController
                alertControllerWithTitle:@"Title"
                                 message:@"Message"
                          preferredStyle:UIAlertControllerStyleAlert];



UIAlertAction* yesButton = [UIAlertAction
                    actionWithTitle:@"Yes, please"
                              style:UIAlertActionStyleDefault
                            handler:^(UIAlertAction * action) {
                                //Handle your yes please button action here
                            }];

UIAlertAction* noButton = [UIAlertAction
                        actionWithTitle:@"No, thanks"
                                  style:UIAlertActionStyleDefault
                                handler:^(UIAlertAction * action) {
                                   //Handle no, thanks button                
                                }];

[alert addAction:yesButton];
[alert addAction:noButton];

[self presentViewController:alert animated:YES completion:nil];

2
আপনার দ্রুত জবাব দেওয়ার জন্য আপনাকে ধন্যবাদ .. আমি এটি চেষ্টা করেছি, তবে সতর্কতা দর্শনটি দেখায় না .. আমি যখন হ্যাঁ দয়া করে ক্রিয়া করি তখন তাও হয় না।
বক্স

আপনি কি আমাকে আপনার কোডটি প্রদর্শন করতে পারেন, কারণ এটি আমার পক্ষে ঠিক কাজ করছে, তা নিশ্চিত করুন যে আপনি এই কোডটি মূল থ্রেডে সম্পাদন করছেন
আদনান আফতাব

আপনি কি আপনার কোডের প্রশ্নের অভ্যন্তরে যুক্ত করতে পারেন, এটি প্রত্যেকেই দেখতে পারা ভাল
আদনান আফতাব

হাই, আমি আমার সম্পূর্ণ কোড যুক্ত করেছি যা আইওএস 8 এবং আইওএস 9 এ কাজ করে তবে পতাকাঙ্কিত হয় না। আমি আপনার কোডটি প্রয়োগ করার জন্য বেশ কয়েকটি উপায়ে চেষ্টা করেছি তবে সতর্কতাটি প্রদর্শিত হয় না এবং ভিউ কন্ট্রোলার স্টোরটি খোলার ক্রিয়াটি কার্যকর হবে না। আপনার সাহায্যের জন্য ধন্যবাদ।
বক্স

আমি মনে করি [alert dismissViewControllerAnimated:YES completion:nil];ক্রিয়া হ্যান্ডলারগুলি থেকে এই লাইনটি সরিয়ে ফেলা ভাল , কারণ সতর্কতাটি এই কোড ব্যতীত স্বয়ংক্রিয়ভাবে লুকায়। তদ্ব্যতীত, কেউ ভুলক্রমে সমাপ্তি ব্লকে কোড লাগাতে পারে যা কার্যকর করা হবে না। চিয়ার্স :)
স্টেলজ

21
//Calling     
[self showMessage:@"There is no internet connection for this device"
                    withTitle:@"Error"];

//Method

-(void)showMessage:(NSString*)message withTitle:(NSString *)title
{

 UIAlertController * alert=   [UIAlertController
                                  alertControllerWithTitle:title
                                  message:message
                                  preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){

        //do something when click button
    }];
    [alert addAction:okAction];
    UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
    [vc presentViewController:alert animated:YES completion:nil];
}

আপনি যদি এই সতর্কতাটি এনএসবজেক্ট শ্রেণিতে ব্যবহার করতে চান তবে আপনার পছন্দ মতো ব্যবহার করা উচিত:

-(void)showMessage:(NSString*)message withTitle:(NSString *)title{
dispatch_async(dispatch_get_main_queue(), ^{
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
    [alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

    }]];

    [[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewController:alertController animated:YES completion:^{
    }];
});
}

14

নতুন বাস্তবায়নের সুইফ্ট সংস্করণটি হ'ল:

 let alert = UIAlertController(title: "Oops!", message:"your message", preferredStyle: .Alert)
 alert.addAction(UIAlertAction(title: "Okay.", style: .Default) { _ in })
 self.presentViewController(alert, animated: true){}

11

এক্সকোড 8 + সুইফ্ট

ধরে selfনেওয়া একটি UIViewController:

func displayAlert() {
    let alert = UIAlertController(title: "Test",
                                  message: "I am a modal alert",
                                  preferredStyle: .alert)
    let defaultButton = UIAlertAction(title: "OK",
                                      style: .default) {(_) in
        // your defaultButton action goes here
    }
    
    alert.addAction(defaultButton)
    present(alert, animated: true) { 
        // completion goes here
    }
}

যদি নিজের দৃষ্টি হয় তবে আমরা কীভাবে এটি অর্জন করব?
সুবিন কে কুরিয়াকোজে

একটি দর্শন করার কোনও ব্যবসা নেই, ভাল, ব্যবসার যুক্তি। আপনার আর্কিটেকচারটি পুনর্বিবেচনা করুন যাতে কোনও কন্ট্রোলার দর্শন উপস্থাপন করে (এমভিভিএম বা এমভিসি)
সুইফট আর্কিটেক্ট

6

ইউআইএলআরএল্টকন্ট্রোলারকে + সতর্কতা নিয়ন্ত্রণকারীকে বিভাগ হিসাবে করুন:

UIAlertController + + AlertController.h

typedef void (^UIAlertCompletionBlock) (UIAlertController *alertViewController, NSInteger buttonIndex);

@interface UIAlertController (AlertController)

+ (instancetype)showAlertIn:(UIViewController *)controller
                  WithTitle:(NSString *)title
                    message:(NSString *)message
          cancelButtonTitle:(NSString *)cancelButtonTitle
          otherButtonTitles:(NSString *)otherButtonTitle
                   tapBlock:(UIAlertCompletionBlock)tapBlock;
@end

UIAlertController + + AlertController.m

@implementation UIAlertController (NTAlertController)

+ (instancetype)showAlertIn:(UIViewController *)controller
                  WithTitle:(NSString *)title
                    message:(NSString *)message
          cancelButtonTitle:(NSString *)cancelButtonTitle
          otherButtonTitles:(NSString *)otherButtonTitle
                   tapBlock:(UIAlertCompletionBlock)tapBlock {

    UIAlertController *alertController = [self alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];

    if(cancelButtonTitle != nil) {

        UIAlertAction *cancelButton = [UIAlertAction
                                       actionWithTitle:cancelButtonTitle
                                       style:UIAlertActionStyleCancel
                                       handler:^(UIAlertAction *action)
                                       {
                                           tapBlock(alertController, ALERTACTION_CANCEL); // CANCEL BUTTON CALL BACK ACTION
                                       }];
        [alertController addAction:cancelButton];

    }

    if(otherButtonTitle != nil) {

        UIAlertAction *otherButton = [UIAlertAction
                                   actionWithTitle:otherButtonTitle
                                   style:UIAlertActionStyleDefault
                                   handler:^(UIAlertAction *action)
                                   {
                                       tapBlock(alertController, ALERTACTION_OTHER); // OTHER BUTTON CALL BACK ACTION
                                   }];

        [alertController addAction:otherButton];
    }

    [controller presentViewController:alertController animated:YES completion:nil];

    return alertController;
}

@end

আপনার ViewController.m এ

[UIAlertController showAlertIn:self WithTitle:@"" message:@"" cancelButtonTitle:@"Cancel" otherButtonTitles:@"Other" tapBlock:^(UIAlertController *alertController, NSInteger index){

 if(index == ALERTACTION_CANCEL){

 // CANCEL BUTTON ACTION
 }else
if(index == ALERTACTION_OTHER){

 // OTHER BUTTON ACTION
 }

 [alertController dismissViewControllerAnimated:YES completion:nil];

 }];

দ্রষ্টব্য: আপনি যদি দুটিরও বেশি বোতাম যুক্ত করতে চান তবে UIAlertController এ আরও একটি ইউআইআইএলআর্টএ্যাকশন যুক্ত করুন।


3

ইউআইএলআর্টভিউয়ের পরিবর্তে ইউআইআইএলআরএল্টকন্ট্রোলার ব্যবহার করুন

-(void)showMessage:(NSString*)message withTitle:(NSString *)title
{
UIAlertController * alert=   [UIAlertController
                              alertControllerWithTitle:title
                              message:message
                              preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){

    //do something when click button
}];
[alert addAction:okAction];
UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
[vc presentViewController:alert animated:YES completion:nil];
}

3

আমি উপরের পদ্ধতিগুলি চেষ্টা করেছি এবং আমি সতর্কতার দর্শন কেউই প্রদর্শন করতে পারবেন না, কেবল যখন আমি presentViewController:একটি dispatch_asyncবাক্যে পদ্ধতিটি রাখি :

dispatch_async(dispatch_get_main_queue(), ^ { [self presentViewController:alert animated:YES completion:nil]; });

পড়ুন iOS 9 এর জন্য UIAlertView বিকল্প?


1
 UIAlertController * alert = [UIAlertController
                                 alertControllerWithTitle:@"Are you sure you want to logout?"
                                 message:@""
                                 preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction* yesButton = [UIAlertAction
                                actionWithTitle:@"Logout"
                                style:UIAlertActionStyleDestructive
                                handler:^(UIAlertAction * action)
                                {

                                }];

    UIAlertAction* noButton = [UIAlertAction
                               actionWithTitle:@"Cancel"
                               style:UIAlertActionStyleDefault
                               handler:^(UIAlertAction * action) {
                                   //Handle no, thanks button
                               }];

    [alert addAction:noButton];
    [alert addAction:yesButton];

    [self presentViewController:alert animated:YES completion:nil];

0

এটা যাচাই কর:

UIAlertController *alertctrl =[UIAlertController alertControllerWithTitle:@"choose Image" message:nil preferredStyle:UIAlertControllerStyleActionSheet];
    UIAlertAction *camera =[UIAlertAction actionWithTitle:@"camera" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
        [self Action];  //call Action need to perform 
    }];

[alertctrl addAction:camera];
-(void)Action 

{

}

0
-(void)showAlert{

    UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Title"
                                                                   message:"Message"
                                                            preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
                                                          handler:^(UIAlertAction * action) {}];

    [alert addAction:defaultAction];
    [self presentViewController:alert animated:YES completion:nil];
}

[self showAlert]; // কল করার পদ্ধতি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.