SORU
4 Ocak 2009, Pazar


Nasıl bir UİNavigationController bir görünüm pop ve tek bir işlemle başka bir ile değiştirebilir miyim?

Bir UİNavigationController bu yığından bir görünüm çıkarın ve başka bir ile değiştirmek için ihtiyacı olan bir uygulama var. Bu durum ilk görünümü düzenlenebilir bir madde oluşturur ve maddenin bir editör ile kendisi değiştirir. İlk görüş alanında belirgin bir çözüm bulduğum zaman:

MyEditViewController *mevc = [[MYEditViewController alloc] initWithGizmo: gizmo];

[self retain];
[self.navigationController popViewControllerAnimated: NO];
[self.navigationController pushViewController: mevc animated: YES];
[self release];

Çok garip bir davranış. Genellikle Düzenleyicisi görünümünde görünür, ama eğer nav çubuğunda Geri düğmesini kullanın ekstra ekranlar, boş ve biraz çuvallamıştır. Başlık rasgele de olur. Yığın tamamen bitik gibi nav.

Bu sorun için daha iyi bir yaklaşım şekli nedir?

Teşekkürler Matt

CEVAP
24 Kasım 2009, Salı


El ile viewControllers özelliği karıştırmaya hiç gerek yok keşfettim. Orada bir yaklaşık 2 zor şeyler.

  1. self.navigationController self şu anda gezinti kontrol yığın üzerinde ise nil dönecektir. Erişimi kaybetmeden önce yerel bir değişkene kaydedin.
  2. retain (ve düzgün release) self ya da olacak olan yöntem sahibi olan nesne, yabancılık neden kaldırıldı olmalısınız.

Bu hazırlık yapmak, o zaman sadece pop ve normal olarak itin. Bu kodun hemen bir üst denetleyici yerini alacak.

// locally store the navigation controller since
// self.navigationController will be nil once we are popped
UINavigationController *navController = self.navigationController;

// retain ourselves so that the controller will still exist once it's popped off
[[self retain] autorelease];

// Pop this controller and replace with another
[navController popViewControllerAnimated:NO];
[navController pushViewController:someViewController animated:NO];

Eğer YES sonra yeni ekran aslında animasyon olacak ve denetleyici animated değiştirirseniz son cümleye sadece dışarı attı animasyon olacak. Güzel görünüyor!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CruzerLite

    CruzerLite

    1 EKİM 2011
  • DavidParody

    DavidParody

    17 EKİM 2009
  • UnboxTechnology

    UnboxTechnol

    20 Ocak 2011