2015-07-26 2 views
0

Итак, у меня есть куча кнопок на моей странице, и их отсортировать по массиву типа [UIButton] и вызвать buttonsArray.метод для вызова отправителя для UIButton

Когда вы нажимаете одну из этих кнопок, у меня есть действие, связанное с функцией goToFacts, которая идет вместе с моим segue «goToFactSegue» и передает информацию о кнопке WHICH (отправитель) для моей подготовки к функции segue. Моя функция prepareforSegue подтверждает правильность идентификатора segue, а затем устанавливает индекс переменной в правый номер на странице DetailViewController. То, как я вычисляю правильное число, чтобы установить индекс (называемый whoIndex), сопоставим, какой индекс (нажатие кнопки) находится в кнопкеArray. моя проблема заключается в нахождении названия/имени кнопки, которая была нажата (отправитель), и установки имени theButtonsName, чтобы я мог найти его в моих кнопкахArray и найти его индекс.

TL; DR как вы тянете имя по UIButton, как вы бы использовать .view на UIImageView

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "goToFactSegue" { 
     // send info to next page 
     if let whereToGo = segue.destinationViewController as? DetailViewController { 
      let theButtonsName = sender!.******** as! UIButton 
      if let whichIndex = find(buttonsArray, theButtonsName) { 
      whereToGo.index = whichIndex 
      }} 
    } 
} 

@IBAction func goToFacts(sender: UIButton) { 
    performSegueWithIdentifier("goToFactSegue", sender: sender) 
} 

Я искал через все Xcode возможностей предлагает и ничего не взаимодействует с UIButton, читайте на doc и все, о чем они говорят, это .titleLabel, который является этим фактическим текстом (И нет, .titleLabel не работает) Также попробовали обычных подозреваемых (варианты названий ... и т. д.)

+0

Вы не должны пытаться бросить theButtonsName отправителя! .titleLabel! .text как UIButton но струны. Если на кнопке есть кнопка titleLabel, которая должна присутствовать с ее значением. –

ответ

1
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "goToFactSegue" { 

     if let whereToGo = segue.destinationViewController as? DetailViewController { 

     let button = sender as! UIButton 
     let theButtonsName = button.titlelabel?.text 


      if let whichIndex = find(buttonsArray, theButtonsName) { 
      whereToGo.index = whichIndex 
      } 
     } 
    } 
} 
+0

Ударьте меня на секунду :) был готов опубликовать сообщение - это было то, что я сделал, чтобы исправить ошибку, спасибо Shades! Кроме того, я не разбил его на две части (так как это не тайтлабель, которую мы ищем. Просто достал проблемный код, и он сработал. –

2

Я предлагаю вам, тем самым и кратко объясняя, что делает ваше приложение, чтобы пометить ваши кнопки. Вы можете сделать это с помощью раскадровки, пометя каждую кнопку со значениями, такими как 1, 2, 3, ..., n, и тогда у вас будет указатель, который вы, похоже, ищете. UIButton имеет свойство:

println("Tag of button: \(button.tag)") 

Итак, имеет отправителя.

@IBAction func goToFacts(sender: UIButton) { 
     performSegueWithIdentifier("goToFactSegue", sender: sender) 
     whichIndex = sender.tag 
} 
Смежные вопросы