Una muy buena pregunta, pero se trata más sobre cómo funcionan los XIB y qué podemos hacer al respecto.
El problema es que cuando agrega un objeto a un XIB y lo configura como una clase personalizada, simplemente le indica al UIKit que cree una instancia de este objeto. El hecho de que veas en IB como una vista, un botón o un control considerable es exactamente como IB lo atrae por ti. De esta manera, la responsabilidad de crear la perspectiva recae completamente en su clase.
En Objective-C podemos hacer un buen truco para tener XIB con vistas personalizadas y aún agregarlas a IB estableciendo el nombre de clase de la vista agregada. Esto es posible porque puede devolver cualquier instancia desde el método -init de su clase en Objective-C, lo que no es posible con C#.
Sin embargo, todavía se puede facilitar su vida haciendo lo siguiente:
- Definamos XI ter para ser un XI ter que contiene el contenido de su vista personalizada; Ubicación para ser un XIB en el que desee agregarle una vista personalizada.
- crearle vista personalizada y una clase XI ter sentar las interioridades de que el método awakeFromNib
- manija para cargar realmente su XI ter
- Después de haber cargado su XI ter sólo tiene que añadir la parte interna de la misma a la instancia como subvistas.
- Poner una vista normal y configurarla en el suyo propio en Ubicación
- ¡Disfrútalo!
Usted tiene, sin embargo, para aceptar que su XI ter contendría una vista raíz o algo así, que se añadiría como subvista en la instancia de la clase poner en Colocación.
esta manera, usted debe tener algo como:
XI ter con el contenido de su vista personalizada:
Colocación donde se agrega el XI ter:
Como la instancia de vista agregada a su ubicación es el mismo como Propietario de archivo en su XIB, puede establecer salidas y acciones en tanto XIB como Ubicación. Simplemente no olvides que la vista raíz en tu XIB no es la instancia que UIKit creará para ubicarla en la ubicación.
Por razones de conveniencia, por favor encontrar mi código de abajo que es la clase base para facilitar la creación de tales puntos de vista:
using System;
using MonoTouch.ObjCRuntime;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
namespace Member.iOS.Base.Views {
/// <summary>
/// XibView is a Xib-backed UIView subclass which enables easy customization and custom
/// behavior addition.
/// </summary>
public class XibView : UIView {
/// <summary>
/// Exception thrown when a loaded XIB doesn't contain any views inside it.
/// </summary>
class EmptyXibException : Exception {
}
/// <summary>
/// Initializes a new instance of the <see cref="Member.iOS.Base.Views.XibView"/> class.
/// </summary>
/// <param name='handle'>
/// Handle.
/// </param>
public XibView(IntPtr handle) : base(handle) {
}
/// <summary>
/// Upon loading from a containing XIB, takes care of replacing the current instance (which acts as a stab) with
/// a real view loaded from its XIB.
/// </summary>
public override void AwakeFromNib() {
base.AwakeFromNib();
NSArray views = NSBundle.MainBundle.LoadNib(GetType().Name, this, new NSDictionary());
if (views.Count == 0) {
throw new EmptyXibException();
}
UIView rootView = Runtime.GetNSObject(views.ValueAt(0)) as UIView;
rootView.Frame = new System.Drawing.RectangleF(0, 0, Frame.Width, Frame.Height);
AddSubview(rootView);
}
}
}
Podría dar el código que está utilizando para agregar la vista xib? Gracias. –