Попытки стратегически переместить первого респондента в Swift? - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть сетка из 100 полей UITextFields для представления сетки кроссвордов. Каждый UITextField хранится в массиве с именем boxArray. Моя цель - заставить первого респондента перейти к нужному индексу, когда текущий индекс завершит редактирование.

Я попробовал этот подход:

var boxArray: [UITextField?] = [box00,box01,box02 .... box99] //100 index array

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    let theIndex = textField.index //Attempting to get the textfield's position in it's array
    print(theIndex) //to see if I got the position (i didn't)
    //further actions will go here once index retrieved to change first responder

    self.view.endEditing(true)
    return true
}

Если бы я мог просто получить индекс текстового поля в массиве, в котором он хранится, у меня не возникло бы проблем с решением. Я также собираюсь столкнуться с другой проблемой здесь, я не могу получить доступ к своему boxArray, потому что я не знаю, как передать его в эту функцию делегата. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Для типа сетки вы можете использовать UICollectionView. Затем вы можете использовать tab свойство UITextField в вашем cellForItemAtIndexPath методе UICollectionView. А потом получить это значение в вашем textFieldShouldReturn.

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CollectionViewCell", forIndexPath: indexPath) as CollectionViewCell

        cell.textField.tag = indexPath.item

        // Rest of your code to set textField or other controls

        return cell
}

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    let theIndex = textField.tag //Now you can get index in your array from tag property 
    print(theIndex) // This is the index which you want for further process  

    // Rest of your code
    return true
}
0 голосов
/ 30 апреля 2018

boxArray является собственностью вашего класса, верно? Таким образом, вы можете получить доступ из любого метода внутри класса.

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    if let index = boxArray.index(of: textField) {
        let next = (index + 1) % boxArray.count

        boxArray[next].becomeFirstResponder()
    }

    return true
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...