Share via


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:

  1. 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.
  2. bunu için kullanıma sunan bir RegisterAttribute'a Objective-C sahiptir.
  3. Gerekli IntPtr oluşturucusunun var.
  4. 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:

  1. özelliği genel bir alıcı ve ayarlayıcıya sahiptir.
  2. özelliğinde ExportAttribute ve BrowsableAttribute değeri True olarak ayarlanmıştır.
  3. Ö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şenin Initialize yöntemine bir çağrı yapılır.
  • Initialize özelliğinin Counter 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 Sitenull, 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:

A faulty control as red placeholder and the exception details

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:

A warning message at the top of the design surface

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.