2012-03-25 20 views
9

Estoy tratando de aprender monotouch por el momento, y siguiendo el libro monotouch de Mike BlueStein. No es un mal libro, pero está un poco desactualizado desde que apareció xcode 4 (creo) y salió una versión más nueva de monotouch.Cómo agregar una vista personalizada a una vista definida de archivo XIB en monotouch

De todos modos, en mi proyecto tengo un controlador y un archivo xib. También tengo una vista personalizada (por ejemplo, myview: UIView), que anula el método de dibujo. Quiero mostrar mi vista personalizada al lado o encima de la vista definida en el archivo xib. ¿Cómo hago esto?

En el controlador, si anulo el método LoadView y configuro la Vista en una instancia de mi vista personalizada, entonces puedo verla, pero pierdo todo lo definido en el archivo xib. Si trato de agregar como una vista secundaria, no aparece en absoluto.

¿Qué me estoy perdiendo? Si la pregunta no está clara, pregúnteme, para que pueda aclararla.

Saludos.

+0

Esto [SO pregunta] (http://stackoverflow.com/questions/863321/iphone -how-to-load-a-view-using-a-nib-file-created-with-interface-builder) podría ayudar – tipycalFlow

Respuesta

22

Siga los siguientes pasos para utilizar una vista personalizada en una XI ter:

En primer lugar, decorar la vista con la RegisterAttribute:

[Register("MyView")] 
public class MyView : UIView 
{ 
} 

y aplicar el siguiente constructor:

public MyView(IntPtr handle) : base(handle) {} 

Este constructor es necesario para cuando el tiempo de ejecución intente recrear la vista después de que haya sido destruida por una advertencia de memoria. Después de haber creado la clase personalizada:

  • Abra la XI ter en Xcode (siempre haciendo doble clic sobre él a través de MonoDevelop) y añadir un UIView donde lo desee.
  • En Xcode, establezca que la clase de UIView a MyView (o el nombre que le pasa a la RegisterAttribute):

Custom class for custom view

  • Compilar-Run.

EDIT:

no sí anulan LoadView para los controladores que se cargan desde un XI ter. LoadView está destinado a crear la vista del controlador cuando la vista de ese controlador no se carga desde un XIB.

+0

Cheers. Respuesta perfecta. –

3

Gracias Dimitris, gran respuesta.

Para los que se confunden como yo, aquí es el procedimiento simplista para agregar y utilizar un archivo Xib como un parcial/subvista:

  1. añadir un nuevo archivo Xib en MonoDevelop (es decir LoginView.xib)
  2. Agregue una clase nueva (parcial), esta será la clase personalizada (por ejemplo, el archivo de código subyacente) para la vista.Dale cualquier nombre "LoginView.cs")
  3. Agrega el atributo (RegisterAttribte) y el Constrctor como lo explicamos anteriormente por Dimitris.
    1. Haga doble clic en LoginView.xib para abrirlo en XCode IB. A continuación, cambiar el Custom Class atributo del archivo xib para apuntar a su "archivo de código subyacente" (es decir LoginView.cs)
  4. añadir cualquier puntos de venta o la acción si es necesario. MonoDevelop generará un archivo .designer y lo adjuntará a su archivo de código subyacente, aquí es donde puede ver todos sus puntos de venta y acciones.
  5. En sus controladores en la que desea añadir este punto de vista, cargar su archivo .xib de la siguiente manera:

    vistas var = NSBundle.MainBundle.LoadNib ("LoginView", esto, null); LoginView loginView = Runtime.GetNSObject (views.ValueAt (0)) como LoginView; mainLayout.AddSubview (loginView); // donde mainLoyout es el marcador de posición en mi ViewController principal

Estas tres líneas se basan en respuesta flexaddicted here

Cuestiones relacionadas