Bazı verileri ayrıntılı bir ViewViewController'da sunan bir uygulama üzerinde çalışıyorum. Kendi UIActivity alt sınıf öğelerimle dolu bir UIActivityViewController sunan navbarda bir rightBarButton var. Bunların çoğu, küçük bir görünümü yalnızca ayrıntı görünümünden veriye dönüştürdüğü için iyi çalışır, ancak seçildikten sonra bir modalViewController açmak için bunlardan birine ihtiyacım var. Ben o uygulama çökmez ama kalıcı görünüm ya görünmüyor fazlalaştı varsayalımUIActivity View Controller'dan alınan UIActivity öğesinden bir ModalViewController'ı nasıl sunabilirim?
Warning: Attempt to present <UINavigationController: 0x1fd00590>
on <UITabBarController: 0x1fde1070> which is already presenting <MPActivityViewController: 0x1fd2f970>
..... konsoldan aşağıdaki uyarıyı almaya devam. UIActivityViewController'ın modal bir görünüm olduğu varsayılıyor ve yalnızca bir tanesini görüntüleyebiliyorsunuz, böylece görev ActivityView kaybolduğunda segueimi nasıl gerçekleştireceğimi anlamaya çalışıyorum, ancak bu noktada güldüğüm yer. Herhangi bir yardım, düşünce veya geri bildirimi memnuniyetle karşılıyorum. Google'ı denedim ama çok şansım olmadı, sanırım UIActivityViewController çok yeni.
Kurulumum şu ana kadar, UIActivity nesnelerimde, detailViewController'ın veri değişikliklerini gerçekleştirmesini ve ardından görünümünü güncelleştirmesini sağlayan özel bir protokol için detailViewController öğesine ayarlanmış bir temsilci var. ModalView denetleyicisini sunması gereken söz konusu etkinlikler için
Tümüyle aynı uyarıyı aldığım birkaç yaklaşımı denedim.
Bu İşlerin Hiçbiri !!!
1) sadece
- (void) activityDidRequestTransactionEdit
{
NSLog(@"activityDidRequestTransactionEdit");
[self performSegueWithIdentifier:@"editTransaction" sender:self];
}
2) UIActivityViewController bir tamamlama blok belirlenmiş ve temsilci yöntemi, modal görünüm olmalıdır Boole bayrağı set sahip güvenilir zaman temsilci yönteminden performans segue güvenilir gösterilir (self.editor)
[activityViewController setCompletionHandler:^(NSString *activityType, BOOL completed) {
NSLog(@"completed dialog - activity: %@ - finished flag: %d", activityType, completed);
if (completed && self.editor) {
[self performSegueWithIdentifier:@"editTransaction" sender:self];
}
}];
), UIActivityViewController kendisi sınıflara bir temsilci olarak o DetailView veren ve geçersiz kılma Bunu
- (UIViewController *) activityViewController {
MPEditMyDataViewController *controller = [[MPEditMyDataViewController alloc] init];
controller.activity = self; // more on this property below
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];
return navController;
}
gibi bu yöntemi geçersiz kılmak için gereken UIActivity alt sınıfında
- (void) dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion
{
[super dismissViewControllerAnimated:flag completion:^{
[self.MPActivityDelegate activityDidRequestTransactionEdit];
}];
}
çalışma Çözüm
kendi tamamlama bloğu ile yöntemi: 's dismissViewControllerAnimated MPEditMyDataViewController.h'nizde
(t Eğer MPEditMyDataViewController kadar
@property (strong, nonatomic) MPEditMyDataActivity *activity;
gibi etkinlik alt sınıfa geri bir özellik ihtiyaç o seçilmiş eylem üretmelidir denetleyicisi) görüntüleyin.m
- (void)viewDidLoad
{
[super viewDidLoad];
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
target:self
action:@selector(cancel)];
self.navigationItem.leftBarButtonItem = cancelButton;
}
// here's how you dismiss the view controller when you are done with it
// after saving the changes to your data or whatever the view controller is supposed to do.
-(void) cancel
{
NSLog(@"Cancel Button Pushed");
[self.activity activityDidFinish:YES];
}
@end
Başkasının sorun yaşadığı durumlarda takip etmek için yukarıdaki düzenleme örneğinde çözüm örneğine bakın. – vichudson1