Xamarin. iOS 'da. XIB kod üretimi
Apple Interface Builder Tool ("ıB"), 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 öğeleri ve diğer nesnelere, Kullanıcı tanımlı özel bir tür olabilecek bir "sınıf kimliği" verilebilir. Özel türleri kullanmak pencere öğelerinin davranışını özelleştirmenizi ve özel pencere öğeleri yazmanızı sağlar.
Bu kullanıcı sınıfları, normalde UI denetleyicisi sınıflarının alt sınıflarıdır. Bunlar, arabirim nesnelerine bağlanabilir (Özellikler ) ve eylemlerle (olaylar). Çalışma zamanında, ıB yüklenir. Bu sırada, nesneler oluşturulur ve işlemler ve eylemler çeşitli UI nesnelerine dinamik olarak bağlanır. Bu yönetilen sınıfları tanımlarken, tüm eylemleri ve aykırı değerleri, ıB 'nin beklediği olanlarla eşleşecek şekilde tanımlamanız gerekir. Mac için Visual Studio kodu basitleştirmek için CodeBehind benzeri bir model kullanır. Xcode 'un benzer bir Objective-C modeli vardır. Ancak Xamarin. iOS kod oluşturma modeli ve kuralları, .NET geliştiricilerine daha tanıdık tweaked.
. XIB dosyaları ve özel sınıflar
Ortak COA Touch 'taki mevcut türleri kullanmanın yanı sıra . XIB dosyalarında özel türler tanımlamak mümkündür. Ayrıca, diğer . XIB dosyalarında tanımlanmış türleri kullanmak veya yalnızca C# kodunda tanımlanmış olması mümkündür. Şu anda, Interface Builder geçerli . XIB dosyası dışında tanımlanan türlerin ayrıntılarını bilmez, bu nedenle bunları listemez veya özel aykırı durumlarını ve eylemlerini göstermez. Bu sınırlamanın kaldırılması, gelecekte bir süre için planlanmaktadır.
Özel sınıflar, Interface Builder "sınıflar" sekmesinde "alt sınıf Ekle" komutu kullanılarak . XIB dosyasında tanımlanabilir. Bu sınıflara "CodeBehind" sınıfları olarak başvurduk. . xıb dosyası projede bir ". xıb. designer. cs" karşılık gelen bir dosya içeriyorsa, Mac için Visual Studio . xibiçindeki tüm özel sınıfların kısmi sınıflar tanımlarına göre otomatik olarak doldurulur. Bu kısmi sınıflara "Tasarımcı sınıfları" olarak başvurduk.
Kod Üretme
Kod üretimi bir. XIB . Designer. cs dosyasının varlığı tarafından, derleme eylemi olan herhangibir . XIB dosyası için etkinleştirilir. Mac için Visual Studio, tasarımcı dosyasında, . xıb dosyasında bulabileceği tüm kullanıcı sınıfları için kısmi sınıflar oluşturur. Mac için Visual Studio, işlemler için ve kısmi yöntemlere yönelik özellikler oluşturur.
tasarımcı dosyası, . xıb dosyası değiştiğinde ve Mac için Visual Studio kazanabilmesi odağa göre otomatik olarak güncelleştirilir. tasarımcı dosyasında değişiklik yapmak önerilmez çünkü Mac için Visual Studio bir sonraki sefer dosyayı güncelleştirir.
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ı 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şmediği fark edebilirsiniz.
sınıfı çalışma zamanı tarafından bulunabilir hale getirmek için Objective-C Mac için Visual Studio [Register (name)] sınıfa bir öznitelik uygular. Xamarin. iOS türetilmiş sınıfları otomatik olarak kaydettirir NSObject , ancak tam .net adlarını kullanır. Mac için Visual Studio tarafından uygulanan öznitelik, her bir sınıfın . xıb dosyasında kullanılan adla kaydettirildiğinden emin olmak için Xamarin. iOS davranışını geçersiz kılar. tasarımcı dosyalarını oluşturmak için Mac için Visual Studio kullanmadan ıb kullanılarak tanımlanan tüm özel sınıflar için özniteliği el ile ekleyin. Bunun yapılması yönetilen sınıflarınızın beklenen Objective-C sınıf adlarıyla eşleşmesini sağlar.
Sınıflar birden fazla . xibiçinde tanımlanamaz veya çakışırlar.
Tasarımcı olmayan sınıf bölümleri
Tasarımcı kısmi sınıflarının olduğu gibi kullanılması amaçlanmamaktadır. Outizin özel ve temel sınıf belirtilmedi. Her sınıfın, başka bir dosyada karşılık gelen "tasarımcı olmayan" sınıf parçası olması beklenir. "Tasarımcı olmayan" dosya temel sınıfı ayarlar, aykırı değerleri yönetir ve yerel koddan sınıfın örneğini oluşturmak için gereken oluşturucuları tanımlar. Varsayılan . XIB şablonlarında, "tasarımcı olmayan" sınıf parçaları vardır, ancak bir . xibiçinde tanımladığınız diğer özel sınıflar için tasarımcı olmayan parçayı el ile eklemeniz gerekir.
Kısmi sınıfları kullanan bu ayrım esneklik için gereklidir. Örneğin, birden çok CodeBehind sınıfı ortak bir yönetilen soyut sınıfın alt sınıfını oluşturarak sınıfın alt sınıfını ıB tarafından örneklenebilir.
CodeBehind sınıfları. XIB. Designer. cs tasarımcı dosyasının yanına bir . XIB. cs dosyasına yerleştirmek standart bir.
Oluşturulan eylemler ve aykırı Işlemler
kısmi tasarımcı sınıflarında, Mac için Visual Studio IB ' de tanımlı tüm bağlı dış işlemlere karşılık gelen özellikleri ve bağlantılı eylemlere karşılık gelen kısmi yöntemleri oluşturur.
Çıkış özellikleri
Tasarımcı sınıfları, özel sınıfta tanımlanan tüm dış bilgisayarlara karşılık gelen özellikleri içerir. Bu özellikler yavaş bağlamayı etkinleştirir. Bu kişiler, Xamarin. iOS to hedefi C köprüsünün uygulama ayrıntısıyla yapılı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 parçasındaki alana ortak erişimci ekleyerek alanı ortak hale getirin.
Çıkış özellikleri, türünde (eşdeğer) bir türe sahip olacak şekilde tanımlanmışsa idNSObject , tasarımcı kod üreticisi Şu anda bu çıkış için bağlı olan nesnelere göre olası en güçlü türü belirler.
Ancak, bu davranış sonraki sürümlerde desteklenmeyebilir. Özel sınıfı tanımlarken, aykırı değerleri açıkça kesinlikle yazmanız önerilir.
Eylem özellikleri
Tasarımcı 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 uygulamaya sahip değildir. Kısmi yöntemlerin amacı, Twofold:
partialtasarımcı olmayan sınıf bölümünün sınıf gövdesini yazarsanız Mac için Visual Studio, uygulanmayan tüm kısmi yöntemlerin imzalarını otomatik tamamlamayı sağlayacak şekilde sunacaktır.- Kısmi Yöntem imzalarının, bunları dünyaya sunan bir özniteliği vardır Objective-C ve bu sayede ilgili eylem olarak işlenebilirler.
Kısmi yöntemi yoksayabilir ve özniteliği farklı bir yönteme uygulayarak eylemi uygulayabilirsiniz. Ya da bir temel sınıfa dönelim.
Eylemler gönderici türü id (ile eşdeğer) olacak şekilde tanımlanmışsa NSObject , tasarımcı kod Oluşturucu Şu anda bu eyleme bağlı nesnelere göre olası en güçlü türü belirler. Ancak, bu davranış sonraki sürümlerde desteklenmeyebilir. Özel sınıfı tanımlarken eylemleri açıkça kesinlikle yazmanız önerilir.
Bu kısmi yöntemler yalnızca C# için oluşturulur, çünkü CodeDOM kısmi yöntemleri desteklemez. Diğer diller için oluşturulmazlar.
Çapraz XıB sınıf kullanımı
Bazen, kullanıcılar, örneğin Tab denetleyicileri gibi birden çok . XIB dosyasından aynı sınıfa başvurmak istiyor. Sınıf tanımına başka bir . XIB dosyasından açıkça başvurabilirsiniz veya ikinci . xibiçinde aynı sınıf adını tekrar tanımlayabilirsiniz.
ikinci durum, Mac için Visual Studio . xıb dosyalarını ayrı ayrı işlerken sorunlu olabilir. Mac için Visual Studio, yinelenen tanımları algılayamaz ve birleştiremez. Aynı kısmi sınıf birden çok tasarımcı dosyasında tanımlandığında, YAZMAÇ özniteliğini birden çok kez uygulayan çakışmalar ile karşılaşabilirsiniz. Mac için Visual Studio çakışmaları çözmeye yönelik son sürümler, ancak her zaman beklendiği gibi çalışmayabilir. gelecekte bu davranışın desteklenme olasılığı yüksektir. bunun yerine Mac için Visual Studio tüm . xıb dosyalarında ve yönetilen kodda tüm. xıb dosyalarından doğrudan görünür hale gelir.
Tür çözümlemesi
IB 'de kullanılan türler, Objective-C yazmaç öznitelikleri KULLANıLARAK clr türlerine eşlenen tür adlarıdır. kod oluştururken Mac için Visual Studio CLR türlerini çözümleyecek ve tür adlarını türlerine tam olarak niteleyecek Objective-C . Bu Objective-C türler Xamarin. iOS Core tarafından sarmalanır.
Kod Oluşturucu Şu anda Objective-C Kullanıcı kodundaki veya kitaplıklardaki tür ADLARıNDAN CLR türlerini çözümleyemiyor. Bu gibi durumlarda, tür adını harfine çıktı olarak verir. Objective-CClr türünü düzgün bir şekilde çözümlemek için türle aynı ada sahip olmalıdır. CLR türü, kendisini kullanan kodla aynı ad alanında olmalıdır. Kod oluşturucunun gelecekteki sürümleri, projedeki tüm türleri göz önünde bulunduracaktır Objective-C .