2015-04-15 11 views
5

düğmesine basıldığında geri dönüş düğmesi Birden çok amaç için UIAlertController kullanmaya çalışıyorum. İki düğme var, iptal et ve tamam. Bir yönteme eklemek ve düğmeye basmak istiyorum, bu yüzden kullanıcının yanıtını kontrol edip üzerinde çalışabilirim.UIAlertController

Şimdi, block içinde bir değer döndüremiyorum. Peki, bunun için nasıl giderim?

Teşekkürler.

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Atenção!", "Atenção!") message:NSLocalizedString(@"Você não finalizou a sua série. Se sair desta tela, irá zerar o cronômetro.", "") preferredStyle:UIAlertControllerStyleAlert]; 

    UIAlertAction *cancelar = [UIAlertAction actionWithTitle:NSLocalizedString(@"Cancelar", "Cancelar") style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) 
           { 
            [alertController dismissViewControllerAnimated:YES completion:nil]; 
            // I would like to return this button press to the method calling this one. 
           }]; 
    [alertController addAction:cancelar]; 

    UIAlertAction *ok = [UIAlertAction actionWithTitle:NSLocalizedString(@"OK", "OK") style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) 
           { 
            [alertController dismissViewControllerAnimated:YES completion:nil]; 
            // I would like to return this button press to the method calling this one. 
           }]; 
    [alertController addAction:ok]; 

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

GÜNCELLEME: Gerçek kullanım

kullanıcı back button bastığında, bir durumu kontrol etmek için bir yöntem arayacak. Koşul yerine getirilirse, uyarı gösterilir ve kullanıcının ekranı terk etmeye karar vermesi gerekir. Bu nedenle, cevabı IBActionback Button'a döndürmek harika olur.

Not: Bütün fikir, back Button'un yanı sıra diğer yöntemleri de kullanmaktır, ayrıca uyarıyı gösterir ve kullanıcıdan bir yanıt alır.

+1

gibi bu yöntemi sırt düğmesini Şimdi bu

- (void)alertWithResponse:(void (^)(BOOL didCancel))response { UIAlertController *alertController = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Atenção!", "Atenção!") message:NSLocalizedString(@"Você não finalizou a sua série. Se sair desta tela, irá zerar o cronômetro.", "") preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *cancelar = [UIAlertAction actionWithTitle:NSLocalizedString(@"Cancelar", "Cancelar") style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { [alertController dismissViewControllerAnimated:YES completion:nil]; response(YES); }]; [alertController addAction:cancelar]; UIAlertAction *ok = [UIAlertAction actionWithTitle:NSLocalizedString(@"OK", "OK") style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { [alertController dismissViewControllerAnimated:YES completion:nil]; response(NO); }]; [alertController addAction:ok]; [self presentViewController:alertController animated:YES completion:nil]; } 

gibi bir yöntem oluşturun? Bu uyarı kodu, başka bir yöntemle yazılmış mı, arka tuşta değil mi? Çalışacak –

+0

. Ancak 'alertController' işlevini diğer düğmelerde kullanmak istersem? Kodu tekrarlamam ya da '' alert' '' '' '' '' '' 'i kaydetmem gerekecekti. Sağ? Sadece en iyi çözüm gibi görünmüyor. – Jorge

+1

Yanıtlarımda gördüğüm gibi blokları kullanabilirsiniz. –

cevap

9

Bloklardan yararlanabilirsiniz. Eğer geri düğmesi bu AlertController kullanmak Yüklü neden

diyoruz, bu

- (IBAction)backButtonCliccked:(id)sender { 

    //your button logic... 
    //. 
    //. 
    //. 
    [self alertWithResponse:^(BOOL didCancel) { 
     if(didCancel) { 
      //alert returned Cancel 
     } else { 
      //alert returned OK 
     } 
    }]; 
} 
+1

Mükemmel! Teşekkürler. – Jorge

+0

Eski UIAlertView ile karşılaştırıldığında, geri aramaların içinde çalışan bloktan oldukça önemli gecikmeler elde ediyorum. Gerçekten sinir bozucu. Animasyonun bitmesini beklediği için "amaçlandığı gibi kırılmış" gibi görünüyor. Bunu çözmek için iyi bir yol bulamıyor. – nickdnk

+0

Tam olarak, karşılaştığınız sorun nedir açıklayabilir misiniz? Ana kuyrukta UI güncellemeleri yapmıyor olabilirsiniz. –