Сделать кнопку это UIAlertView выполнить Segue
Я создал UIAlertView
за действие, которое дает мне 2 варианта. Я хочу, чтобы пользователь мог нажать на кнопку и заставить ее выполнить переход.
Вот код, который у меня есть:
- (IBAction)switchView:(id)sender
{
UIAlertView *myAlert = [[UIAlertView alloc]
initWithTitle:@"Please Note"
message:@"Hello this is my message"
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:@"Option 1", @"Option 2", nil];
[myAlert show];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
NSString *buttonTitle = [alertView buttonTitleAtIndex:buttonIndex];
if ([buttonTitle isEqualToString:@"Option 1"]) {
}
}
3 ответа
Да, поначалу это не очень очевидно, вам нужно создать ручной переход.
Выберите ViewController, который будет выполнять толкание (я тот, кто толкает), и подключите руководство к контроллеруpush-просмотра (контроллеру Pressed View).
iOS 8+ со Swift
Выберите вновь созданный segue и дайте ему имя (в моем случае это "segue.push.alert"
(длинное имя для регистрации) и вызовите выполнение в действии предупреждения, например:
let alert = UIAlertController(title: "My Alert", message: "Be Alerted. This will trigger a segue.", preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil))
alert.addAction(UIAlertAction(title: "Segue", style: .Default, handler:
{
[unowned self] (action) -> Void in
self.performSegueWithIdentifier("segue.push.alert", sender: self)
}))
presentViewController(alert)
[unowned self]
следует обращаться с осторожностью, если контроллер представления может освободить во время действия, вам лучше с [weak self]
а затем делать self?.performSegue...
если освобождение может произойти.
Старый ответ
Теперь из контроллера представления вы можете просто позвонить performSegueWithIdentifier:sender:
, в твоем случае
// Using enums is entirely optional, it just keeps the code neat.
enum AlertButtonIndex : NSInteger
{
AlertButtonAccept,
AlertButtonCancel
};
// The callback method for an alertView
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)index
{
if (index == AlertButtonAccept)
{
[self performSegueWithIdentifier:@"segue.push.alert" sender:self];
}
}
Преимущество наличия сегментов таким образом (вместо непосредственного кодирования) состоит в том, что вы все равно можете получить хороший обзор потока ваших приложений, поскольку смешанные кодированные сегменты и сегменты, загруженные раскадровкой, в некотором роде не справляются с этой задачей.
Если вы дадите своему seue идентификатор в вашей раскадровке, вы можете сделать это:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
NSString *buttonTitle = [alertView buttonTitleAtIndex:buttonIndex];
if ([buttonTitle isEqualToString:@"Option 1"]) {
[self performSegueWithIdentifier:@"foo" sender:nil];
}
}
Вот еще один способ загрузить ViewController. Вы можете использовать Storyboard Identifier. Прочитайте это: Что такое идентификатор StoryBoard и как я могу его использовать?
Сначала установите Storyboard ID в Identity Inspector, а затем добавьте следующий код в ваш делегат оповещений.
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
NSString *buttonTitle = [alertView buttonTitleAtIndex:buttonIndex];
if ([buttonTitle isEqualToString:@"Option 1"]) {
// This will create a new ViewController and present it.
NewViewController *newViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"NewViewControllerID"];
[NewViewController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
[self presentViewController:NewViewController animated:YES completion:nil];
}
}
Надеюсь это поможет!:)