Share via


Xamarin.iOS'ta .xib Kod Oluşturma

Apple Interface Builder aracı ("IB") kullanıcı arabirimlerini görsel olarak tasarlamak için kullanılabilir. IB tarafından oluşturulan arabirim tanımları .xib dosyalarına kaydedilir. .xib dosyalarındaki pencere öğelerine ve diğer nesnelere özel bir kullanıcı tanımlı tür olabilecek bir "sınıf kimliği" verilebilir. Özel türlerin kullanılması, pencere öğelerinin davranışını özelleştirmenize ve özel pencere öğeleri yazmanıza olanak tanır.

Bu kullanıcı sınıfları normalde UI denetleyicisi sınıflarının alt sınıflarıdır. Arabirim nesnelerine bağlanabilen çıkışlar (özellikler) ve eylemler (olaylar) vardır. Çalışma zamanında IB yüklenir. Bu sırada nesneler oluşturulur ve çıkışlar ve eylemler çeşitli kullanıcı arabirimi nesnelerine dinamik olarak bağlanır. Bu yönetilen sınıfları tanımlarken, IB'nin beklediğiyle eşleşecek tüm eylemleri ve çıkışları tanımlamanız gerekir. Mac için Visual Studio kodu basitleştirmek için CodeBehind benzeri bir model kullanır. Xcode da benzer Objective-C bir modele sahiptir. Ancak Xamarin.iOS kod oluşturma modeli ve kuralları .NET geliştiricilerine daha tanıdık olacak şekilde değiştirildi.

.xib Dosyaları ve Özel Sınıfları

Cocoa Touch'taki mevcut türleri kullanmanın yanı sıra .xib dosyalarında özel türler tanımlamak da mümkündür. Diğer .xib dosyalarında tanımlanan veya yalnızca C# kodunda tanımlanan türleri kullanmak da mümkündür. Şu anda, Arabirim Oluşturucusu geçerli .xib dosyasının dışında tanımlanan türlerin ayrıntılarını bilmiyor, bu nedenle bunları listelemez veya özel çıkışlarını ve eylemlerini göstermez. Bu sınırlamanın kaldırılması, gelecekte bir süre için planlanır.

Özel sınıflar, Arabirim Oluşturucusu'nun "Sınıflar" sekmesindeki "Alt Sınıf Ekle" komutu kullanılarak bir .xib dosyasında tanımlanabilir. Bu sınıflara "CodeBehind" sınıfları denir. .xib dosyasının projede ".xib.designer.cs" bir karşılık gelen dosyası varsa, Mac için Visual Studio bunu otomatik olarak .xib içindeki tüm özel sınıflar için kısmi sınıf tanımlarıyla doldurur. Bu kısmi sınıfları "tasarımcı sınıfları" olarak adlandırıyoruz.

Kod Üretme

Kod oluşturma, Page derleme eylemine sahip herhangi{0} bir{0} .xib dosyası için bir .xib.designer.cs dosyasının varlığıyla etkinleştirilir. Mac için Visual Studio, .xib dosyasında bulabileceği tüm kullanıcı sınıfları için tasarımcı dosyasında kısmi sınıflar oluşturur. Mac için Visual Studio çıkışlar için özellikler ve eylemler için kısmi yöntemler oluşturur.

Tasarımcı dosyası, .xib dosyası değiştiğinde ve Mac için Visual Studio odağı yeniden kazandığında otomatik olarak güncelleştirilir. Mac için Visual Studio dosyayı bir sonraki güncelleştirişinde değişikliklerin üzerine yazılacağından, tasarımcı dosyasında değişiklik yapılması önerilmez.

Kayıt ve Ad Alanları

Mac için Visual Studio, tasarımcı dosya konumu için projenin varsayılan ad alanını kullanarak tasarımcı sınıflarını oluşturur. Bu davranış normal .NET proje ad alanı oluşturma ile tutarlıdır. Tasarımcı dosyalarının ad alanı, projenin "varsayılan ad alanı" ve ".NET adlandırma ilkeleri" ayarlarını kullanır. Projenizin varsayılan ad alanı değişirse, yeniden oluşturulan sınıflar yeni ad alanını kullanır. Yeniden oluşturma işleminden sonra kısmi sınıflarınızın artık eşleşmemiş olduğunu fark edebilirsiniz.

Sınıfı çalışma zamanı tarafından Objective-C bulunabilir hale getirmek için Mac için Visual Studio sınıfa bir [Register (name)] öznitelik uygular. Xamarin.iOS türetilmiş sınıfları otomatik olarak kaydeder NSObject, ancak tam .NET adlarını kullanır. Mac için Visual Studio tarafından uygulanan öznitelik, her sınıfın .xib dosyasında kullanılan adla kaydedildiğinden emin olmak için Xamarin.iOS davranışını geçersiz kılar. Tasarımcı dosyaları oluşturmak için Mac için Visual Studio kullanmadan IB kullanılarak tanımlanan tüm özel sınıflar için özniteliğini el ile ekleyin. Bunun yapılması, yönetilen sınıflarınızın beklenen Objective-C sınıf adlarına eşleşmesini sağlar.

Sınıflar birden fazla .xib içinde tanımlanamaz, aksi durumda çakışırlar.

Tasarım Aracı Olmayan Sınıf Parçaları

kısmi sınıfların Tasarım Aracı olduğu gibi kullanılması amaçlanmamıştır. Çıkışlar özeldir ve temel sınıf belirtilmez. Her sınıfın başka bir dosyada karşılık gelen bir "tasarımcı olmayan" sınıf parçası olması beklenir. "Tasarımcı olmayan" dosyası temel sınıfı ayarlar, çıkışları işler ve yerel koddan sınıfın örneğini oluşturmak için gereken oluşturucuları tanımlar. Varsayılan .xib şablonları "tasarımcı olmayan" sınıf bölümlerine sahiptir, ancak .xib içinde tanımladığınız diğer tüm özel sınıflar için tasarımcı olmayan bölümü el ile eklemeniz gerekir.

Esneklik için kısmi sınıflar kullanan bu ayrım gereklidir. Örneğin, birden çok CodeBehind sınıfı ortak bir yönetilen soyut sınıfı alt sınıfa alabilir ve bu sınıf IB tarafından alt sınıflandırılır.

CodeBehind sınıflarını .xib.designer.cs tasarımcı dosyasının yanında bir .xib.cs dosyasına yerleştirmek gelenekseldir{0}.{0}

Oluşturulan Eylemler ve Çıkışlar

Kısmi tasarımcı sınıflarında, Mac için Visual Studio IB'de tanımlanan bağlı çıkışlara karşılık gelen özellikleri ve bağlı eylemlere karşılık gelen kısmi yöntemleri oluşturur.

Çıkış Özellikleri

Tasarım Aracı sınıfları, özel sınıfta tanımlanan tüm çıkışlara karşılık gelen özellikleri içerir. Bu özellikler gecikmeli bağlamayı etkinleştirir. Xamarin.iOS-Objective C köprüsünün uygulama ayrıntılarıdır. Bunları yalnızca CodeBehind sınıfından kullanılması amaçlanan özel alanlara eşdeğer olarak düşünün. Tasarımcı olmayan sınıf bölümündeki alana ortak erişimcisini ekleyerek alanı genel yapın.

Çıkış özellikleri türüne (eşdeğeri idNSObject) sahip olacak şekilde tanımlanmışsa tasarımcı kod oluşturucu şu anda bu çıkışa bağlı nesnelere göre mümkün olan en güçlü türü belirler. Ancak, bu davranış gelecekteki sürümlerde desteklenmeyebilir. Özel sınıfı tanımlarken çıkışları açıkça yazmanız önerilir.

Eylem Özellikleri

Tasarım Aracı sınıfları, özel sınıfta tanımlanan tüm eylemlere karşılık gelen kısmi yöntemler içerir. Bu yöntemlerin bir uygulaması yoktur. Kısmi yöntemlerin amacı iki kattır:

  1. Tasarımcı olmayan sınıf bölümünün sınıf gövdesine yazarsanızpartial, Mac için Visual Studio uygulanmamış tüm kısmi yöntemlerin imzalarını otomatik tamamlamayı önerir.
  2. Kısmi yöntem imzalarının, bunları Objective-C dünyaya sunan bir özniteliği vardır, böylece bunlara karşılık gelen eylem olarak işlenebilirler.

Kısmi yöntemi yoksayabilir ve özniteliğini farklı bir yönteme uygulayarak eylemi uygulayabilirsiniz. Ya da temel sınıfa geçmesine izin verin.

Eylemlerin gönderen türü (ile eşdeğerNSObject) id olması için tanımlanmışsa tasarımcı kod oluşturucu şu anda bu eyleme bağlı nesnelere göre mümkün olan en güçlü türü belirler. Ancak, bu davranış gelecekteki sürümlerde desteklenmeyebilir. Özel sınıfı tanımlarken eylemleri açıkça yazmanız önerilir.

CodeDOM kısmi yöntemleri desteklemediğinden bu kısmi yöntemler yalnızca C# için oluşturulur. Diğer diller için oluşturulmaz.

Çapraz XIB Sınıf Kullanımı

Bazen, kullanıcılar aynı sınıfa birden çok .xib dosyasının (örneğin, sekme denetleyicileriyle) başvurmak isteyebilir. Sınıf tanımına başka bir .xib dosyasından açıkça başvurabilir veya ikinci .xib dosyasında aynı sınıf adını yeniden tanımlayabilirsiniz.

İkinci durum, .xib dosyalarını ayrı ayrı işlemeye Mac için Visual Studio nedeniyle sorunlu olabilir. Mac için Visual Studio yinelenen tanımları algılayamaz ve birleştiremez. Birden çok tasarımcı dosyasında aynı kısmi sınıf tanımlandığında Register özniteliğini birden çok kez uygulayan çakışmalarla karşılaşabilirsiniz. Mac için Visual Studio'ın son sürümleri çakışmaları çözmeye çalışır, ancak her zaman beklendiği gibi çalışmayabilir. Gelecekte bu davranış büyük olasılıkla desteklenmeyen bir davranış olacaktır ve bunun yerine Mac için Visual Studio projedeki tüm .xib dosyalarında ve yönetilen kodda tanımlanan tüm türlerin tüm .xib dosyalarından doğrudan görünür olmasını sağlayacaktır.

Tür Çözümlemesi

IB'de kullanılan türler, Register öznitelikleri kullanılarak CLR türlerine eşlenen tür adlarıdır Objective-C . Kod oluştururken, Mac için Visual Studio CLR türlerini çözümler ve tür adlarını türlere tam olarak nitelerObjective-C. Bu Objective-C türler Xamarin.iOS çekirdeği tarafından sarmalanmıştır.

Kod oluşturucu şu anda kullanıcı kodundaki veya kitaplıklardaki tür adlarındaki Objective-C CLR türlerini çözümleyemiyor. Bu gibi durumlarda, tür adını tam olarak gösterir. CLR türünü düzgün bir şekilde çözümlemek Objective-C için türle aynı ada sahip olmalıdır. CLR Türü, onu kullanan kodla aynı ad alanında olmalıdır. Kod oluşturucunun gelecekteki sürümleri projedeki tüm Objective-C türleri dikkate alacaktır.