Quiero hacer una matriz con un montón de UIImageViews tengo en el Interface Builder. En lugar de tener 20 o 30

IBOutlet UIImageView *img1;

y la vinculación de todos ellos de esa manera, y luego ponerlos en una matriz, es allí una manera de declarar un array de IBOutlet UIImageViews?

Solo así que no tengo muchas declaraciones en mi archivo de encabezado.

InformationsquelleAutor Marty | 2010-12-05

5 Comentarios

  1. 43

    Es posible, se llama salida de la colección de. Esta es la manera de definir una toma de corriente de la colección:

    @property(retain) IBOutletCollection(UIImageView) NSArray *images;

    Ahora usted puede pegar más de un objeto en la toma de corriente en el Interface Builder, la matriz será creado cuando la interfaz está cargado.

    • Me tomó un tiempo bastante largo para trabajar como «palo de más de un objeto en la toma de corriente’ en xcode 4. Después de la creación de la IBOutletCollection en el código esperaba ser capaz de CTRL y Arrastre desde la UIImageView a ella. Esto no funciona, por alguna razón. Lo que sí funciona, aunque es seleccionar el Archivo ‘Propietario’, a continuación, abra el «Conexiones inspector’, a continuación, arrastre desde la Salida de colecciones de la sección a cada UIImageView en turno.
    • Yo no podía entender cómo implementar esta – gracias @BenClayton !
    • En la vista previa para desarrolladores de xcode 5, el problema que @BenClayton mencionado parece ser resueltos – CTRL + Arrastrar ahora no trabajo para unirse a la matriz. Bonita respuesta aquí!
  2. 4

    Estoy un poco tarde aquí, pero puede ser más fácil establecer la propiedad tag de cada ImageView en IB, a continuación, acceder a ellos como [some_superview viewWithTag:tag] en lugar de mantener una independiente de la manija a cada uno.

  3. 1

    Aquí es más fácil manera de hacerlo.

    Siga estos pasos para crear una matriz de puntos de venta de una conectarse con IB Elementos:

    • Crear una matriz de IBOutlets
    • Agregar varios UIElements (Vistas) en su Guión ViewController interfaz
    • Seleccione ViewController (En el guión) y conexión abierta inspector
    • Hay opción de Salida de Colecciones » en relación inspector (Usted verá una serie de tomas de allí)
    • Conectar si con sus elementos de la interfaz de

    class ViewController2: UIViewController {
    
    
        @IBOutlet var collection:[UIView]!
    
    
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    }

    Cómo hacer IBOutlets de una matriz de objetos?

  4. -4

    No hay, por desgracia, pero usted puede tener todas las declaraciones en una sola línea:

    IBOutlet UIImageView *img1, *img2, *img3, *img4;

    La otra opción (que probablemente sea la mejor, ya que muchos de estos) sería la de crear mediante programación y almacenarlos en una matriz, a continuación, agregarlos a la vista desde el controlador de vista de clase, utilizando, para cada uno,

    [self.view addSubview:img];

    Además, tenga en cuenta que si los elementos son estáticas (como elementos de fondo), y en realidad no se necesita para acceder a ellas, no es necesario declarar las salidas para cada uno, usted puede agregarlos al archivo nib y se olvidan de ellos.

    Mismo va para UIButton instancias. Si usted no necesita cambiar nada sobre el botón, usted puede acceder a él desde el método que se invoca, así:

    -(IBAction) buttonPressed:(id)sender {
        UIButton *button = (UIButton *)sender;
        //method guts
        //stuff with button -- access tag, disable, etc
    }
    • Me gustaría crear mediante programación, pero ellos tienen que ir todos en ciertos lugares, y no quiero tener que poner donde poner cada uno. Y necesito cambiarlos desde oculta para que no se oculta en ciertos momentos, así que tengo que ser capaz de acceder a ellos. La única línea de la declaración hará que se vea más ordenado, al menos.
    • Sí, no nos cacao enlaces en el iPhone, así que esto es realmente lo mejor que podemos hacer. Hizo esta respuesta a la pregunta?

Dejar respuesta

Please enter your comment!
Please enter your name here