2016-01-08 4 views
1

Я совершенно новый для Swift (и кодирования в целом) и на этом сайте.Как сделать кнопку UIAlert, чтобы перейти к следующей раскадровке?

У меня сейчас немного проблема. В моем приложении у меня есть предупреждение, когда таймер достигает 0. В этом предупреждении есть две кнопки. Один говорит «Share», а другой говорит «Продолжить». Я хочу сделать так, чтобы, когда пользователь нажимает «Продолжить», следующая Раскадровка будет показана им. На данный момент какая-либо кнопка, которую я нажимаю, отключит предупреждение, но останется на той же Раскадке. (Он также выводит на консоль кнопку, на которую я нажал, но, конечно, это только для меня).

Как мне это сделать? Вот мой код, если кто-то захочет узнать.

let alert = UIAlertController(title: "Time's Up!", message: "What would you like to do now?", preferredStyle: .Alert) 
let firstAction = UIAlertAction(title: "Continue", style: .Default) { (alert: UIAlertAction!) -> Void in 
    NSLog("You pressed button one") 
} 

let secondAction = UIAlertAction(title: "Share", style: .Default) { (alert: UIAlertAction!) -> Void in 
    NSLog("You pressed button two") 
} 

alert.addAction(firstAction) 
alert.addAction(secondAction) 
presentViewController(alert, animated: true, completion:nil) 
+0

Добро пожаловать на SO. Что вы пробовали до сих пор, с точки зрения представления следующего раскадровки? Ни один из показанных вами кодов не взаимодействует с раскадными версиями, поэтому с этим сложно справиться. См. [Ask] – jtbandes

+0

, что вы имели в виду следующую сцену (контроллер просмотра) в той же раскадровке? или следующая сцена (контроллер просмотра) в следующей раскадровке – Johnykutty

+0

@jtbandes По общему признанию, я не слишком много знаю о представлении следующей раскадровки в моем приложении. Прямо сейчас, что я делаю, в Main.storyboard, я Control перетаскиваю кнопку в одном ViewController на другой ViewController, и когда появляется небольшое черное всплывающее окно, я нажимаю модальный, и все. В инспекторе атрибутов я просто выбираю другую анимацию. Это все, что я знаю. – ryanbangras

ответ

2

Попробуйте с этим:

// Create the alert controller 
    var alertController = UIAlertController(title: "Title", message: "Message", preferredStyle: .Alert) 

// Create the actions 
    var okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default) { 
     UIAlertAction in 
     NSLog("OK Pressed") 
     let storyboard = UIStoryboard(name: "MyStoryboardName", bundle: nil) 
     let vc = storyboard.instantiateViewControllerWithIdentifier("someViewController") as UIViewController 
     self.presentViewController(vc, animated: true, completion: nil) 
    } 

    var cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel) { 
     UIAlertAction in 
     NSLog("Cancel Pressed") 
     //do whatever you want here 
    } 

// Add the actions 
    alertController.addAction(okAction) 
    alertController.addAction(cancelAction) 

// Present the controller 
    self.presentViewController(alertController, animated: true, completion: nil) 

Если вы еще не установлен ваш ViewControllerIdentifier:

http://i.stack.imgur.com/8M7Ia.png

Вам необходимо установить значение идентификатора, который можно найти в правой колонке

+0

Спасибо за быстрый ответ. Я обязательно попробую это и посмотрю, как это происходит. – ryanbangras

+0

@ryanbangras без проблем! и если вы еще не установили ViewControllerIdentifier, проверьте edit – Signo

+0

Итак, я попытался поместить это в свой код, но я получил ошибки в любое время, когда упоминался «var». Всплывающее окно для ошибок говорит: «Variable _name_ никогда не мутировалось.Подумайте об изменении« let »constant. И в строке' presentViewController (vc, animated: true, completion: nil) 'Я получаю сообщение об ошибке« Неявное использование ' «я» в закрытии; использовать «я». чтобы сделать семантику захвата явной. Я полный noob, когда дело доходит до кодирования, и я не знаю, что это значит. Пожалуйста, порекомендуйте. ** Редактировать: я не видел вашего редактирования, я мог бы попробовать это ** – ryanbangras

1

Вот код, который может вам помочь. Когда вы создаете AlertController с действиями, вы можете указать действия и стиль кнопки при их определении. В коде ниже действия в крышке (блок) и стиль определяется как .Default или .Cancel

let alert = UIAlertController(title: "Time's Up!", message: "What would you like to do now?", preferredStyle: .Alert) 
let firstAction = UIAlertAction(title: "Continue", style: .Default) { (alert: UIAlertAction!) -> Void in 

    // Action when you press button goes here 
     print("Here you show next storyboard item.") 
    // Code to push new ViewController. For example : 
     self.navigationController?.pushViewController(newVCInstance, animated: true) 
} 

let secondAction = UIAlertAction(title: "Share", style: .Default) { (alert: UIAlertAction!) -> Void in 
print("Here you share things.") 
    // Code to share things. 
} 

let thirdAction = UIAlertAction(title: "Cancel", style: . Cancel) { (alert: UIAlertAction!) -> Void in 
    print("Just dismissing the Alert Controller.") 
} 


alert.addAction(firstAction) 
alert.addAction(secondAction) 
alert.addAction(thirdAction) 

presentViewController (предупреждение, анимированные: истинное, завершение: ноль)

+0

Спасибо за ответ. Я также попробую ваш код и дам вам знать, как это происходит! – ryanbangras

+0

Эй, я опробовал ваш код, и, как и у другого парня, я получаю те же ошибки. Xcode говорит мне использовать let вместо var, а затем ** «Неявное использование« я »в закрытии, используйте« self. », Чтобы сделать семантику захвата явной.» ** в строке: presentViewController (vc, animated: true, завершение: ноль) Что мне делать? – ryanbangras

+0

Xcode говорит использовать let вместо var, поэтому замените var на let. Фактически здесь Xcode обнаруживает, если вы создаете элемент данных и не обновляете его позже. Поэтому Xcode предлагает вам использовать let, что означает, что он не изменится в будущем. – BLC

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