ios iphone interface-builder iboutlet iboutletcollection

ios - ¿Cómo hacer IBOutlets fuera de una matriz de objetos?



iphone interface-builder (5)

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

IBOutlet UIImageView *img1;

y vinculándolos de esa manera, y luego colocándolos en una matriz, ¿hay una manera de declarar una matriz de IBOutlet UIImageViews?

Solo para que no tenga tantas declaraciones en mi archivo de encabezado.


Aquí hay una manera más fácil de hacerlo.

Siga estos pasos para crear una serie de puntos de venta y conéctelo con los elementos de IB:

  • Crear una matriz de IBOutlets
  • Agregue múltiples UIElements (Vistas) en su interfaz de Storyboard ViewController
  • Seleccione ViewController (en el guión gráfico) y abra el inspector de conexión
  • Hay una opción ''Colecciones de puntos de venta'' en el inspector de conexiones (Verá una serie de puntos de venta allí)
  • Conecta si con los elementos de tu interfaz.

-

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


Desafortunadamente, no hay, pero puede mantener todas las declaraciones en una sola línea:

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

La otra opción (probablemente la mejor, ya que tiene muchas de estas) sería crearlas programáticamente y almacenarlas en una matriz, luego agregarlas a la vista desde su clase de controlador de vista, usando, para cada una,

[self.view addSubview:img];

Además, tenga en cuenta que si los elementos son estáticos (como elementos de fondo), y en realidad no necesita acceder a ellos, no necesita declarar salidas para cada uno; puede simplemente agregarlos al archivo de la punta y olvidarse de ellos.

Lo mismo ocurre con UIButton instancias de UIButton . Si no necesita cambiar nada sobre el botón, puede acceder a él desde el método al que llama, así:

-(IBAction) buttonPressed:(id)sender { UIButton *button = (UIButton *)sender; // method guts // stuff with button -- access tag, disable, etc }


Es posible, se llama colección outlet . Esta es la forma de definir una colección outlet:

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

Ahora puede pegar más de un objeto en la salida en el Interface Builder, la matriz se creará para usted cuando se cargue la interfaz.


Llego un poco tarde aquí, pero puede ser más fácil establecer la propiedad de etiqueta de cada ImageView en IB, luego acceder a ellos como [some_superview viewWithTag:tag] lugar de mantener un identificador separado para cada uno.


Swift 3 y superior:

@IBOutlet var stuckLabels: [UIImageView]