İçinde farklı tablo görünümü hücreleriyle bir tablo görünümü var. Hücrelerden birinde, basıldığında bir görüntü denetleyicisini yükleyen iki düğme vardır. Ben butonuna basarken işlemek için aşağıdaki işlevi kullanıyorum:iOS segue iki kez çalıştırıldı
- (IBAction)leftButtonPressed:(id)sender
{
// Getting the pressed button
UIButton *button = (UIButton*)sender;
// Getting the indexpath
NSIndexPath *indPath = [NSIndexPath indexPathForRow:button.tag inSection:0];
// Loading the proper data from my datasource
NSArray *clickedEvent = [[[SOEventManager sharedEventManager] eventsArray] objectAtIndex:indPath.row];
[[SOEventManager sharedEventManager] setSelectedEvent:clickedEvent[0]];
// Everything working as it should up to this point
// Performing seque...
[self performSegueWithIdentifier:@"buttonSegue" sender:self];
}
Benim buttonSegue yeni bir görünüm denetleyicisi itmek gerekiyordu. Bir şekilde yerine kez iterek, iki kez bastırıyor gibi görünüyor, bu yüzden aşağıdaki uyarıyı alıyorum: Benim durumumda
2013-11-27 01:48:30.894 Self-Ordering App[2081:70b] nested push animation can result in corrupted navigation bar
2013-11-27 01:48:31.570 Self-Ordering App[2081:70b] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
Ben uygulamanın hemen pop istediğiniz bir etkinlik olduğundan o çökmesine yol açan Görünüm denetleyicisi böylece tablo görünümüne geri dönün. Bunun için bir alertview kullanmak ve aşağıdaki olay işlemek: Beni ilginç benim "normal" tablo görünümü hücresinden bir diğer segue olduğunu not etmek olabilir
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSString *buttonTitle = [alertView buttonTitleAtIndex:buttonIndex];
// ...
// Additional checking of button titles....
else if ([buttonTitle isEqualToString:NSLocalizedString(@"Vissza", nil)])
{
[self.navigationController popViewControllerAnimated:YES];
}
}
ve bu durumda ben prepareForSegue kullanmak : yöntem
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"detailSegue"])
{
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
SOEvent *selectedEvent = [[[SOEventManager sharedEventManager] eventsArray] objectAtIndex:indexPath.row];
[[SOEventManager sharedEventManager] setSelectedEvent:selectedEvent];
}
}
Bu durumda, denetleyici mükemmel bir şekilde itilir ve gerekirse hemen atılır. Bunu iOS7 ve Xcode 5'de test ediyorum. Daha önce hiç böyle bir problemle karşılaşmadım, herhangi bir yardım çok takdir edilecektir.
Arabirim oluşturucuda eylemleri doğru şekilde bağladığınızdan emin misiniz? Belki de olayı, her ikisi de içeriye değmek yerine içeriye değin ve içeriye değmek yerine içeriye dokundun. ya da belki de her iki koddan segue atamadım ve tekrar arayüz oluşturucuda. Onları kontrol ettin mi? Bu yaygın bir hatadır. –
Oh lanet olsun .. Aslında haklısınız, düğmelerimi de tablo görünümü veri kaynağı yöntemlerine atadım. Cevabınız için teşekkür ederiz! –