2010-08-13 14 views
7

iOS uygulamamın arabiriminde, & yineleme düğmesini açık bir şekilde sonlandırıyorum (çalkalama işlemi oldukça ağır bir işlemdir ve bu bağlamda, geri gönderimler oldukça sık gerçekleştirilir). Normalde, NSUndoManager'ın canUndo ve canRedo anahtar yollarını gözlemlemek ve &'u etkinleştirmek için KVO'yu kullanacağım, bildirimler geldikçe düğmeleri devre dışı bırakacağız. Ne yazık ki, NSUndoManager bu anahtar yollar için KVO-uyumlu değil, ya da en azından I ' Bildirimler açısından bir şey göremiyorum.NSUndoManager ve geri alma düğmesini etkinleştirme/devre dışı bırakma

Benim sorum şu: Bu nasıl çalışıyor? KVO ile yanlış mı yapıyorum? (Ben & üç kez kontrol ettim ama her zaman bu olasılık var). Bunu düşünmemek için başka bir yolu var mı? (Sadece runloop her döndüğünde -canUndo değerini kontrol etmekteyim ama benim için kötü bir kod kokusu var).

cevap

12

(bu durumda, bir yardımcı cevap olacak o NSUndoManager iOS ve Mac OS X üzerinde farklı olduğunu oldukça mümkündür unutmayın, bu yüzden "Bu Mac üzerinde çalışır" sanmıyorum)

NSUndoManager'ın NSUndoManagerDidUndoChangeNotification ve arkadaşlarınız için yeni geri alma grupları oluşturulduğunda ve yığından atıldığında ve düğmelerin durumlarını uygun şekilde güncellerken incelemek için kaydolun.

+3

Awesome - NSUndoManagerWillCloseUndoGroupNotification daha önce kaçırdığım bir oyundur. Artık her şey mantıklı. Teşekkürler @aclark. –

+1

Son takip: Hepsi mükemmel çalıştı. –

+0

Dokümantasyonda şu yazıyor: "Bir NSUndoManager" nesnesinden önce gönderilen, "endUndoGrouping" yönteminin uygulanmasında oluşan bir geri alma grubunu kapatır. " Ancak, tek bir geri alma işlemini kaydettiğinizde (ör. '-registerUndoWithTarget: selector: object:') kaydedildiğini doğrulayabilirim. "Notification.object" ('NSUndoManager') 'da' canUndo 'öğesini çağırmak ve kullanıcı arayüzündeki herhangi bir" geri alma "düğmesini etkinleştirmek/devre dışı bırakmak çok yararlıdır. –

İlgili konular