2016-10-28 5 views
0

Я делаю приложение iOS с использованием Swift, который является скалой, бумагой и ножницами.Как передать значения из ViewController в другой ViewController с помощью кнопки с Swift 3.0

Когда вы нажимаете кнопку (с изображением «Сканирование», «Бумага» или «Ножницы»), он перейдет к другому контроллеру просмотра и отобразит его связь, выигрыш или потерю (сравнивает ваш номер [ Рок-кнопка 1] на случайное число на компьютере). Но он не отображает результат, поскольку он должен находиться в кнопке, а не в кнопке и в viewDidLoad().

Я дам вам фрагменты кода. Я использую функции в следующем контроллере просмотра, чтобы вернуть строку.

Так что мне нужна помощь с передачей userNum и computerNum следующему контроллеру View в кнопке (при нажатии), чтобы вызвать функцию и вернуть строку.

var userNum: Int = 0 
var computerNum: Int = 0 

@IBAction func rock(_ sender: UIButton) { 
    userNum = 1 
    computerNum = (Int)(arc4random_uniform(3) + 1) 
} //This next code will be in the other View Controller 
func chooseWinner(userNum : Int, computerNum : Int) -> String { 
    if userNum == computerNum { 
     return "There is a tie" 
    }else if userNum == 1 && computerNum == 2{ 
     return "You lost!" 
    }else if userNum == 1 && computerNum == 3{ 
     return "You won!" 
    }else if userNum == 2 && computerNum == 1{ 
     return "You won!" 
    } 
    else if userNum == 2 && computerNum == 3{ 
     return "You lost!" 
    }else if userNum == 3 && computerNum == 1{ 
     return "You lost!" 
    } 
    else if userNum == 3 && computerNum == 2{ 
     return "You won!" 
    }else{ 
     return "value" 
    } 
} 
+0

Попробуйте выполнить segue с идентификатором ... – Joe

+0

Я пробовал это, но я не знаю, как передать значение. – FusionPointInc

ответ

3

В раскадровки редакторе, удерживая Ctrl, удерживая LeftClick и перетащите мышь к контроллеру вида назначения вы хотите, чтобы непосредственно перейти. Вы можете выбрать тип segue после отпускания мыши, например. show.

Это позволит вам перейти к контроллеру точки назначения без необходимости программирования IBAction, как в вашем коде.

В контроллере представления источника, добавить функцию

prepare(for segue: UIStoryboardSegue, sender: Any?)

, который позволит вам проверить на Segue и делать какие-либо дополнительные настройки, прежде чем segueing.

Не забудьте установить идентификатор для Segue в атрибуте Inpector

identifier

Внутри источника ViewController

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "destination" { 


     //OtherViewController is a placeholder for the viewcontroller class of your destination viewcontroller 
     if let destinationVC = segue.destinationViewController as? OtherViewController { 
      destinationVC.userNum = 1 
      destinationVC.computerNum = (Int)(arc4random_uniform(3) + 1) 
     } 
    } 
} 

Внутри контроллера вид назначения

var userNum: Int! 
var computerNum: Int! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    //do wtv you need with your values 
    print(chooseWinner(userNum: userNum, computerNum: computerNum)) 
} 
+0

Есть ли какие-либо? вместо AnyObject? Хорошо? Это не позволит мне делать AnyObject без удаления переопределения. – FusionPointInc

+0

Хорошее наблюдение! Я не понял, что они изменились с AnyObject на Any. – Danoram

+0

id импортируется как Any? вместо AnyObject с Swift 3. –

Смежные вопросы