Я хочу использовать несколько выпадающих - PullRequest
0 голосов
/ 11 октября 2018

Я хочу использовать несколько выпадающих.Но возникает ошибка «Индекс вне диапазона»

var drop: Array<DropDown?> = []
var dropDataSource: Array<String> = []
@IBOutlet var buttons: [UIButton]!

Я объявил вот так.

func setDropDown() {

    for i in 0...15 {
        drop[i] = DropDown()
        drop[i]?.anchorView = button
        drop[i]?.bottomOffset = CGPoint(x: 0, y:(dropDown?.anchorView?.plainView.bounds.height)!)
        switchDropData(dataCount: i)
        drop[i]?.dataSource = dropDataSource
        buttons[i].addTarget(self, action: #selector(dropBtn), for: .touchUpInside)
        drop[i]?.selectionAction = { [unowned self] (index: Int, item: String) in
            self.buttons[i].setTitle(item, for: .normal)
        }

    }

}

@objc func dropBtn(dataCount: Int) {
    drop[dataCount]?.show()
}

и сделаю 15 выпадений.

, но drop[I] = DropDown() приводит кошибка.

Я знаю, что означает «Ошибка индекса вне диапазона».

Но я не знаю, почему в этом коде есть ошибка.

Есть что-нибудь, япропал в коде?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Просто создайте новый DropDown () и затем добавьте его в массив перетаскивания

func setDropDown() {

 for i in 0...15 {
    var newDrop = DropDown()
    newDrop.anchorView = button
    newDrop.bottomOffset = CGPoint(x: 0, y:(dropDown.anchorView?.plainView.bounds.height)!)
    switchDropData(dataCount: i)
    newDrop.dataSource = dropDataSource
    buttons[i].addTarget(self, action: #selector(dropBtn), for: .touchUpInside)
    newDrop.selectionAction = { [unowned self] (index: Int, item: String) in
        self.buttons[i].setTitle(item, for: .normal)
    }
    drop.append(newDrop)
 }

}

0 голосов
/ 11 октября 2018

Index out of range означает, что вы пытаетесь получить доступ к элементу в массиве, который не существует, потому что индекс находится за пределами диапазона массива (от первого до последнего).

Это выглядиткак ваш массив не заполнен.
Вы должны изменить следующее, чтобы предотвратить ошибку:

for i in 0...15 {

... на:

for d in drop {

Это будет эффективно зацикливать все элементыв массиве.Если в массиве 0 элементов, цикл вообще не прерывается, поэтому вы не получите ошибку index out of bounds.


Если вы хотите create раскрывающихся списков, вместо того, чтобы не обращаться к ним, вам нужно инициализировать новую переменную и затем добавить новый раскрывающийся список в массив:

for _ in 0...15 {
    var dropdown = DropDown()
    drop.append(dropdown)
    dropdown.anchorView = button
    // ...
}
...