Estoy razonablemente nuevo en el SDK del iPhone, así que por favor perdóname si esta respuesta es ridículamente obvio.

Tengo un ViewController conectado a una .xib archivo (son llamados FirstViewController)

También tengo una clase personalizada denominada MyCustomClass. En esta clase, tengo un método como este:

- (void)setTheText {
    [myLabel setText:@"foo"];
}

Quiero llamar a este método para establecer el texto en una etiqueta en FirstViewController.xib

Hasta ahora, he hecho esto:

Arrastrado en un «Objeto» en el Interface Builder, y el conjunto de la clase a: MyCustomClass
Conectado el IBOutlet ‘myLabel’ de MyCustomClass a un UILabel en la vista.

Sin embargo, cuando ejecuto el programa, y pulse el botón para fijar la etiqueta (que es en FirstViewController.m), algo así como:

- (IBAction)doSomething:(id)sender {
   MyCustomClass *customClass = [MyCustomClass alloc] init];
   [customClass setTheText];
}

Este no establece, sin embargo. NSLog(@"%@",[myLabel text]); devuelve (null)

Xcode no muestra errores o advertencias, lo que podría estar equivocado?

Gracias,

Michael

Info Adicional:

Interfaz para MyCustomClass.h:

#import <UIKit/UIKit.h>

@interface MyCustomClass : NSObject {
    UILabel *myLabel;
}

@property (nonatomic, retain) IBOutlet UILabel *myLabel;

- (void)setTheText;

@end
  • Puedes publicar la interfaz para MyCustomClass? Cómo hacer que usted tiene myLabel que en él se definen?
  • Añadido al post principal
InformationsquelleAutor Michael | 2010-01-21

4 Comentarios

  1. 2

    La instancia de customClass aquí es totalmente ajena a la PUNTA. Usted ha instanciado un objeto nuevo con +alloc. Si desea modificar la específica MyCustomClass en su PUNTA, luego FirstViewController necesidades de un IBOutlet que apunta a la misma.

    • Gracias! Que resuelve mi problema!
  2. 3

    Usted no desea crear una nueva instancia de la clase personalizada en su método de acción.

    Hay un par de maneras de hacer lo que quiera.

    Opción 1 es para dar a su controlador de vista de una referencia a su objeto personalizado. Para ello, cree una toma de corriente de tipo MyCustomClass * en su vista controlador, conecte el enchufe para el nuevo objeto que ha creado en su XIB archivo y, a continuación, deshacerse de la asignación en su método de acción:

    - (IBAction)doSomething:(id)sender {       
        [customClass setTheText];
    }

    Opción 2 es dejar que tu CustomClass manejar tanto la etiqueta y el método de acción. Para hacer esto, usted puede simplificar las cosas aún más. Poner una toma de corriente para la UILabel en su CustomClass, y entonces simplemente convertir su setTheText método en acción:

    - (IBAction)setTheText:(id)sender {
        [myLabel setText:@"foo"];
    }

    Ahora, conectar esa acción hasta su botón, y todo debe funcionar como un encanto.

    Nota: probablemente, Usted debe utilizar un nombre de método que no comienza con «set», ya que los que se utilizan comúnmente para la propiedad incubadoras como parte de Cacao del KVC/KVO sistema. En su lugar, yo diría que es algo así como changeLabel, o equivalente.

  3. 2

    UILabel también tienen una propiedad llamada de texto para establecer el valor, usted puede encontrar que es más fácil.

    myObject.myLabel.text = @"Your text";
    • Gracias por la sugerencia. Soy consciente de la sintaxis de punto, pero tengo una ‘cosa’ en contra de ella =P, prefieren el buen viejo corchetes!
    • Gotcha, se trata más bien de una mayor comodidad para las personas que están acostumbrados a otros idiomas de todos modos.

Dejar respuesta

Please enter your comment!
Please enter your name here