iOS için Xamarin Tasarım Aracı Özel Denetimler
iOS için Xamarin Tasarım Aracı, projenizde oluşturulan veya Xamarin Bileşen Deposu gibi dış kaynaklardan başvuruda bulunan özel denetimlerin işlenmesini destekler.
Uyarı
iOS Tasarım Aracı, Mac için Visual Studio 2019 sürüm 16.8 ve Visual Studio 2019 sürüm 8.8'de kullanım dışı bırakıldı ve Visual Studio 2019 sürüm 16.9 ve Mac için Visual Studio sürüm 8.9'da kaldırıldı. iOS kullanıcı arabirimleri oluşturmanın önerilen yolu doğrudan Xcode çalıştıran bir Mac üzerindedir. Daha fazla bilgi için bkz . Xcode ile kullanıcı arabirimleri tasarlama.
iOS için Xamarin Tasarım Aracı, bir uygulamanın kullanıcı arabirimini görselleştirmeye yönelik güçlü bir araçtır ve çoğu iOS görünümü ve görünüm denetleyicisi için WYSIWYG düzenleme desteği sağlar. Uygulamanız, iOS'ta yerleşik olanları genişleten özel denetimler de içerebilir. Bu özel denetimler birkaç yönerge göz önünde bulundurularak yazılmışsa iOS Tasarım Aracı tarafından da işlenerek daha da zengin bir düzenleme deneyimi sağlanabilir. Bu belge, bu yönergelere göz atar.
Gereksinimler
Tasarım yüzeyinde aşağıdaki tüm gereksinimleri karşılayan bir denetim işlenir:
- UIView veya UIViewController'ın doğrudan veya dolaylı alt sınıfıdır. Diğer NSObject alt sınıfları tasarım yüzeyinde bir simge olarak görünür.
- bunu için kullanıma sunan bir RegisterAttribute'a Objective-C sahiptir.
- Gerekli IntPtr oluşturucusunun var.
- IComponent arabirimini uygular veya DesignTimeVisibleAttribute değeri True olarak ayarlanmıştır.
Yukarıdaki gereksinimleri karşılayan kodda tanımlanan denetimler, içerdiği proje simülatör için derlendiğinde tasarımcıda görünür. Varsayılan olarak, tüm özel denetimler Araç Kutusu'nun Özel Bileşenler bölümünde görünür. Ancak CategoryAttribute, farklı bir bölüm belirtmek için özel denetimin sınıfına uygulanabilir.
Tasarımcı üçüncü taraf Objective-C kitaplıklarının yüklenmesini desteklemez.
Özel Özellikler
Aşağıdaki koşullar karşılanırsa özellik panelinde özel denetim tarafından bildirilen bir özellik görüntülenir:
- özelliği genel bir alıcı ve ayarlayıcıya sahiptir.
- özelliğinde ExportAttribute ve BrowsableAttribute değeri True olarak ayarlanmıştır.
- Özellik türü sayısal bir tür, numaralandırma türü, dize, bool, SizeF, UIColor veya UIImage'dir. Desteklenen türlerin listesi gelecekte genişletilebilir.
Özellik, özellik panelinde bunun için görüntülenen etiketi belirtmek için DisplayNameAttribute ile de dekore edilebilir.
Başlatma
UIViewController
Alt sınıflar için, tasarımcıda oluşturduğunuz görünümlere bağlı olan kod için ViewDidLoad yöntemini kullanmanız gerekir.
Ve diğer NSObject
alt sınıflar için UIView
AwakeFromNib yöntemi, düzen dosyasından yüklendikten sonra özel denetiminizin başlatılmasını gerçekleştirmek için önerilen yerdir. Bunun nedeni, özellik panelinde ayarlanan özel özelliklerin denetimin oluşturucusu çalıştırıldığında ayarlanmamasıdır, ancak çağrılmadan önce AwakeFromNib
ayarlanacaktır:
[Register ("CustomView"), DesignTimeVisible (true)]
public class CustomView : UIView {
public CustomView (IntPtr handle) : base (handle) { }
public override void AwakeFromNib ()
{
// Initialize the view here.
}
}
Denetim de doğrudan koddan oluşturulacak şekilde tasarlanmışsa, ortak başlatma koduna sahip bir yöntem oluşturmak isteyebilirsiniz, örneğin:
[Register ("CustomView"), DesignTimeVisible (true)]
public class CustomView : UIView {
public CustomView (IntPtr handle) : base (handle) { }
public CustomView ()
{
// Called when created from code.
Initialize ();
}
public override void AwakeFromNib ()
{
// Called when loaded from xib or storyboard.
Initialize ();
}
void Initialize ()
{
// Common initialization code here.
}
}
Özellik Başlatma ve AwakeFromNib
iOS Tasarım Aracı içinde ayarlanan değerlerin üzerine yazılmaması için özel bir bileşende tasarlanabilir özelliklerin ne zaman ve nerede başlatılacağına dikkat edilmelidir. Örnek olarak aşağıdaki kodu alın:
[Register ("CustomView"), DesignTimeVisible (true)]
public class CustomView : UIView {
[Export ("Counter"), Browsable (true)]
public int Counter {get; set;}
public CustomView (IntPtr handle) : base (handle) { }
public CustomView ()
{
// Called when created from code.
Initialize ();
}
public override void AwakeFromNib ()
{
// Called when loaded from xib or storyboard.
Initialize ();
}
void Initialize ()
{
// Common initialization code here.
Counter = 0;
}
}
Bileşen, CustomView
iOS Tasarım Aracı içinde geliştirici tarafından ayarlanabilen bir Counter
özelliği kullanıma sunar. Ancak, tasarımcının içinde hangi değer ayarlanırsa ayarlansın, özelliğin Counter
değeri her zaman sıfır (0) olur. Bunun nedeni şu şekildedir:
- bir örneği
CustomControl
Görsel Taslak dosyasından şişirilir. - iOS tasarımcısında değiştirilen tüm özellikler ayarlanır (örneğin değerini iki (2) olarak ayarlama
Counter
gibi). AwakeFromNib
yöntemi yürütülür ve bileşeninInitialize
yöntemine bir çağrı yapılır.Initialize
özelliğininCounter
değeri içinde sıfıra (0) sıfırlanıyor.
Yukarıdaki durumu düzeltmek için özelliği başka bir yerde başlatın Counter
(bileşenin oluşturucusunda olduğu gibi) veya yöntemini geçersiz kılmayın AwakeFromNib
ve bileşenin şu anda oluşturucuları tarafından işlenen işlem dışında başka bir başlatma gerektirmemesi durumunda öğesini çağırın Initialize
.
Tasarım Modu
Tasarım yüzeyinde özel bir denetim birkaç kısıtlamaya uymalıdır:
- Uygulama paketi kaynakları tasarım modunda kullanılamaz. Görüntüler, UIImage yöntemleri aracılığıyla yüklendiğinde kullanılabilir.
- Web istekleri gibi zaman uyumsuz işlemler tasarım modunda gerçekleştirilmemelidir. Tasarım yüzeyi, denetimin kullanıcı arabiriminde animasyonu veya diğer zaman uyumsuz güncelleştirmeleri desteklemez.
Özel bir denetim IComponent uygulayabilir ve tasarım yüzeyinde olup olmadığını denetlemek için DesignMode özelliğini kullanabilir. Bu örnekte, etiket tasarım yüzeyinde "Tasarım Modu" ve çalışma zamanında "Çalışma Zamanı" görüntüler:
[Register ("DesignerAwareLabel")]
public class DesignerAwareLabel : UILabel, IComponent {
#region IComponent implementation
public ISite Site { get; set; }
public event EventHandler Disposed;
#endregion
public DesignerAwareLabel (IntPtr handle) : base (handle) { }
public override void AwakeFromNib ()
{
if (Site != null && Site.DesignMode)
Text = "Design Mode";
else
Text = "Runtime";
}
}
Üyelerinden Site
herhangi birine erişmeye çalışmadan önce her zaman için null
özelliğini denetlemeniz gerekir. ise Site
null
, denetimin tasarımcıda çalışmadığını varsaymak güvenlidir.
Tasarım modunda, Site
denetimin oluşturucusu çalıştırıldıktan sonra ve çağrılmadan önce AwakeFromNib
ayarlanır.
Hata ayıklama
Yukarıdaki gereksinimleri karşılayan bir denetim araç kutusunda görüntülenir ve yüzeyde işlenir. Bir denetim işlenmediyse, denetimdeki hataları veya bağımlılıklarından birini denetleyin.
Tasarım yüzeyi genellikle diğer denetimleri işlemeye devam ederken tek tek denetimler tarafından oluşan özel durumları yakalayabilir. Hatalı denetim kırmızı bir yer tutucuyla değiştirilir ve ünlem simgesine tıklayarak özel durum izlemesini görüntüleyebilirsiniz:
Denetim için hata ayıklama simgeleri varsa, izleme dosya adları ve satır numaraları içerir. Yığın izlemesinde bir satıra çift tıklanması, kaynak kodda bu satıra atlar.
Tasarımcı hatalı denetimi yalıtamazsa tasarım yüzeyinin üst kısmında bir uyarı iletisi görüntülenir:
Hatalı denetim sabitlendiğinde veya tasarım yüzeyinden kaldırıldığında tam işleme devam eder.
Özet
Bu makalede, iOS tasarımcısında özel denetimlerin oluşturulması ve uygulanması tanıtıldı. İlk olarak, denetimlerin tasarım yüzeyinde işlenmek ve özellik panelinde özel özellikleri kullanıma sunmaları için karşılaması gereken gereksinimleri tanımladı. Ardından denetimin başlatılması ve DesignMode özelliğinin arkasındaki koda baktı. Son olarak, özel durumlar oluştuğunda ne olacağı ve bunun nasıl çözüleceğini açıklamaktadır.