Arabirim Oluşturucu aracılığıyla bir UIViewController'a bağlı bir UIView var. Bu görünümü çoğaltıp kullanabilmem için çoğaltılabilir, kopyalayabilir veya kopyalayabilir miyim?Kopyalama, kopyalama veya kopyalama UIView
cevap
Elbette. Belgelerin bir good example of how to achieve that; UITableViewCell
için, ama burada da kullanmak için iyi bir yaklaşım.
Görünümünüzün karmaşıklığına bağlı olarak, özel bir görünüm sınıfı haline getirebilir ve sahip olduğu tüm alt görünümler için ona kendi IBOutlet
özelliklerini verebilirsiniz; Bu durumda, Interface Builder'daki görünümün “Sınıf Kimliği” ni bu sınıfa ayarlarsınız. Daha sonra, görünüm denetleyiciniz, Xpe yüklü herhangi bir görünümde bu görünümlere, örneğin, myLoadedView.someLabel
, örneğin, [myLoadedView viewWithTag:3]
, daha önce belirtilmemiş belgelerin önerdiği gibi kullanmak yerine, erişebilir.
UITableViewCell sadece yüklenene birkaç kez, asla klonlamadı. – geon
Fark olan? –
Tahminimce, @geon, bir çok parçanın arşivden çıkarılmasıyla yeni bir nesne yaratılırken, OP'nin ihtiyaçlarını çözdüğü gibi, sorunun başlığının ima ettiği problem için genel bir çözüm olarak hizmet etmediğini öne sürüyor. Bu, kodda oluşturulan bir UIView'in genel durumunda, örneğin, [UIView alloc] initWithFrame: aFrame]; ile çalışmaz. Cevap doğru ama soru başlığı yanıltıcı. – clozach
aşağıdaki kategori özellikle verimli, ama bir projede benim için çalıştı olmayabilir:
@implementation UIView (OPCloning)
- (id) clone {
NSData *archivedViewData = [NSKeyedArchiver archivedDataWithRootObject: self];
id clone = [NSKeyedUnarchiver unarchiveObjectWithData:archivedViewData];
return clone;
}
@end
Ben -kopyala veya -copyWithZone uygulayamaz ediyorum: Elma gelecekte bunu edebileceğiniz gibi. Not: Tüm görünümler arşivlemeyi aynı ölçüde uygulamıyor. NSView alt sınıflarınızın klonlanacak özel özellikleri için NSCoding yöntemlerini kesinlikle uygulamanız gerekecektir (aksi halde klonlanmış görünümde sıfırlanır). Özel klonlama kodunu yazmaktan daha kolay.
Yine de, harici depolama alanına erişemediğinden, bir kereliğin tekrar tekrar yüklenmesinden daha verimli olmalıdır. – osxdirk
Benim durumumda arşivleme ve arşivden arındırma, birlikte paketten (harici depolama) yükleme koltuğuna göre yaklaşık% 20-25 daha fazla zaman aldı. Yine de, loadNibNamed performansını iyileştirmenin yolunu arıyorum. –
Klonlanmış görünümdeki görüntüler iOS 9'da çok yavaş yükleniyor. – Suresh
Burada kullanabileceğiniz yeni bir yöntemdir: Kullanım UIView metodu:
- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates
Bu bir görünüm çizmek için en hızlı yoludur. iOS mevcuttur 7.
Not: Bu, çok özel bir kullanım durumu için iyi bir çözüm olsa da, bu yöntem aslında orijinal ile aynı türde yeni bir görünüm oluşturmaz. Yalnızca bu anda görünümün görünüşüne benzeyen bir görünüm yaratır (örn. Görünümün bir "ekran görüntüsünü alır"), örneğin bir stand-in olarak kullanabilirsiniz. geçiş efektleri sırasında veya yeniden yükleme/yeniden görüntüleme sırasında. – uliwitness
:
extension UIView{
func copyView() -> AnyObject{
return NSKeyedUnarchiver.unarchiveObject(with: NSKeyedArchiver.archivedData(withRootObject: self))! as AnyObject
}
}
- 1. Kopyalama
- 2. Kopya kopyalama - işaretçi değeri kopyalama
- 3. memcpy kendi kendine kopyalama kopyalama
- 4. Web Sunucusu'ndan Sanal Ortamı Kopyalama/Kopyalama
- 5. grid_graph öğesinden comacency_list'e kopyalama ile kopyalama :: copy_graph
- 6. FS Büyük dosyaları kopyalama ve kopyalama
- 7. Kopyalama/Kopyalama listesi jquery'de seçili seçenek
- 8. Dizinde Kopyalama görevini kullanarak bir dizini kopyalama
- 9. Kopyalama [] - sbyte []
- 10. Kopyalama-stdout'u
- 11. QWidget'i Kopyalama
- 12. git depo günlük kopyalama
- 13. Bir kayıttan diğerine kopyalama
- 14. AS3 kopyalama ve yapıştırma
- 15. Android Studio Kopyalama Modülü
- 16. Delphi'de nesne kopyalama
- 17. IIS'de Varolan Bir Uygulama Havuzunu Klonlama/Kopyalama/Kopyalama
- 18. Toplu iş dosyası Kopyalama ve bırakma için% 1 kullanarak kopyalama
- 19. WiX'de yoksa kopyalama Kopyala
- 20. Kopyalama HTTP isteği inputStream
- 21. MSBuild Kopyalama Kompozisyonunun Verimliliği
- 22. Üzerine yazmadan gradient kopyalama
- 23. WPF: DataGrid'den kopyalama
- 24. Constexpr yapıcısında diziyi kopyalama
- 25. Kopyalama özelliğini nasıl uygularım?
- 26. Kopyalama SVN Havuzu
- 27. Kopyalama alanı panoya kopyala
- 28. Ruby dosya kopyalama kopyası
- 29. gölge kopyalama düzeneğini
- 30. İfade Ağacı kopyalama nesnesi
[Swift cevap] (http://stackoverflow.com/a/37050633/3681880) – Suragch