Estoy tratando de replicar la universidad de Stanford Matchismo juego de «Desarrollo de ios7 aplicaciones para iphone y ipad», en iTunesU en Swift.

En la página 77 de la 3ª conferencia diapositivas, se muestra el uso de un IBOutletCollection que no es una opción en Swift. El Swift doc ejemplo se muestra un ejemplo que tiene una serie de IBOutlet, pero no puedo averiguar cómo hacer que la Interfaz de Generador de conectar varios puntos de venta para el mismo IBOutlet/IBOutlet Matriz.

Alguien ha descubierto cómo hacerlo todavía?

Sé que puedo crear 12 tomacorrientes y tratar con él de esa manera, pero me gustaría hacer este trabajo tan estrechamente como sea posible para el ejemplo de la conferencia de las diapositivas.

  • Xcode no está resaltado de sintaxis @IBOutletCollection como lo hace para @IBOutlet y @IBAction, y que no se menciona en el Apple docs página, que habla de los dos últimos. Parece que no ha llegado todavía o no viene.
  • Presentado como un error: 17200892
  • Recibió una actualización sobre ese error?
  • Mina tiene marcado como «Duplicado de 15607242 (Abierto)» por lo que debe ser un problema real.
  • No se fija en Xcode beta2 para cualquier persona que guarda la pista.
InformationsquelleAutor Alcanzar | 2014-06-05

7 Comentarios

  1. 9

    EDITAR

    Esto fue corregido más tarde en una versión Beta de Swift – hay ahora en
    IBCollection opción en la interfaz del generador.


    Para principios de versiones Beta de Swift:

    Me encontré con el mismo problema: en las notas de lanzamiento de la Beta 2 se encuentra la siguiente declaración:

    Interface Builder no admite declarar toma de colecciones en Swift clases

    Lo resuelto de la siguiente manera (fácil de personalizar):

    class CardGameViewController: UIViewController {
      @lazy var cardButtons : UIButton[] = {
        var tempBtn: UIButton[] = []
        for v:AnyObject in self.view.subviews {
          if v is UIButton {
            tempBtn.append(v as UIButton)
          }
        }
        return tempBtn
      }()
    ...

    Básicamente, recorre todas las subvistas y comprueba si uno es un UIButton. En ese caso, que se añade a una matriz temporal. Esta matriz temporal se utiliza a continuación para perezosos crear una instancia de la cardButtons matriz. Para obtener más información, vea: Matchismo: Objective-C, Swift

  2. 80

    Actualización: Esto funciona correctamente en Xcode ahora – «Salida de la Colección» es una de las opciones de conexión en el Interface Builder, que crea algo que se parece a:

    @IBOutlet var labelCollection: [UILabel]!

    Mientras estamos a la espera de una solución, se puede aproximar mediante un calculado de la propiedad. Digamos que mi punto de vista tiene cinco UILabels que yo quiero en una colección. Todavía tengo que declarar cada uno, pero luego también me declaro un calculada de la propiedad que recoge:

    class MyViewController {
        @IBOutlet var label1 : UILabel
        @IBOutlet var label2 : UILabel
        @IBOutlet var label3 : UILabel
        @IBOutlet var label4 : UILabel
        @IBOutlet var label5 : UILabel
        var labels: UILabel![] { return [label1, label2, label3, label4, label5] }

    Poco molesto, pero a partir de entonces podemos tratar el labels propiedad como si se tratara de un IBOutletCollection, y no tener que cambiar el resto de nuestro código una vez que se ha corregido el error:

    override func viewDidLoad() {
        super.viewDidLoad()
    
        for (index, item) in enumerate(self.labels) {
            item.text = "Label #\(index)"
        }
    }
    • Mientras que a primera vista, que parece funcionar, realmente no. Funciona mejor que mi UILabel[] intento en que puedo arrastrar desde el IBOutlet a un botón específico, si se intenta agregar un segundo botón, que sustituye a la primera. Además, si intento correr con ella conectada a un botón, swift no de su lanzamiento (Comando /Aplicaciones/Xcode6-Beta.app/Contents/Desarrollador/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift no pudo con el código de salida 254)
    • Esto no funciona. Sólo se le permite tener una vista conectados
    • Sí. Yo creo que esto debe ser un error en IB/XCode. bugreport.apple.com
    • entonces, ¿hay una solución?
    • De una especie. Ver mis actualizaciones.
    • oh, querido señor. eso significa que el matchismo proyecto cuenta con 30 líneas de sólo las definiciones de variables… supongo que es lo que haces cuando tratas de código en un lenguaje que se abra al público para menos de un mes.
    • Es por eso que lo llaman filo de lo de la tecnología.
    • Te voy a decir, que a pesar de que hizo probablemente proporcionará una solución para una menor cantidad de componentes, cuando se aplica a la Matchismo proyecto, parece bloquearse cuando intenta compilar.
    • al menos, esto lo solucionamos temporal, espero que tenga algo de real IBOutletCollection Pronto
    • A mí me funciona. Gracias – gran consejo!

  3. 19

    Uso:

    @IBOutlet var lineFields: [UITextField]!

    De control de arrastre de UITextField elementos para lineFields en orden.

  4. 13
    @IBOutlet var buttons : [UIView]!

    a continuación, arrástrelo desde el inspector de conexiones en el interface builder, o lo que sea metod se suele usar para que

  5. 4

    Siga los pasos para crear una matriz de puntos de venta y conectar con IB Elementos:

    • Crear una matriz de IBOutlets
    • Agregar varios UIElements (Vistas) en su Guión ViewController (interfaz Como se muestra en la siguiente instantánea)
    • 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()
        }
    }

    Swift - IBOutletCollection equivalente

  6. 1

    Lo @máquina dijo que parece ser el estado actual (XCode 7.1) con iOS 9 enlaces.
    La clave es arrastrar todos ellos en orden.
    Usa el primer elemento a control+arrastrar en el código de controlador y, a continuación, cambie la Toma de corriente tipo de colección. Después de que el código del controlador de archivos de arrastrar el punto de salida en cada uno de los controles de la pantalla uno por uno en orden (como @máquina dice)

Dejar respuesta

Please enter your comment!
Please enter your name here