2015-06-10 5 views
0

Я разработчик Android.swift custom UIAlertViewDelegate не работает

Я хочу использовать пользовательский UIAlertViewDelegate в моем коде.

демо, как

import UIKit 

class ViewController: UIViewController,UIAlertViewDelegate { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int){ 
     println(buttonIndex) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    @IBAction func onClick1(sender: UIButton) { 

     // define here not work 
     let delegate = MyUIAlertViewDelegate() 

     let alert = UIAlertView(title: "title", message: "message", delegate: delegate, cancelButtonTitle: "cancel", otherButtonTitles: "other","hello") 

     alert.alertViewStyle = UIAlertViewStyle.Default 

     alert.show() 

    } 
} 

// define here works 
// let delegate = MyUIAlertViewDelegate() 


class MyUIAlertViewDelegate : UIViewController, UIAlertViewDelegate { 
    func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int){ 
     println("click" + String(buttonIndex)) 
    } 
} 

но это не работает. Почему?

+0

Какова ваша цель? –

+0

@Ramshad Я хочу что-то сделать после нажатия кнопки, как UIAlertAction в ios8 – aotian16

ответ

1

я заметил, когда вы создаете UIAlertView под названием «оповещать» вы установите сообщение для сообщения, для демонстрационных целей это не будет работать, если сообщение не является переменной со строковым значением.

Также вы вызываете alert.show() ни в чем! его нужно вызвать чем-то или где-то, поэтому в примере, который я сделал ниже, он находится в viewDidAppear.

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

import UIKit 

class ViewController: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

override func viewDidAppear(animated: Bool) { 
    alert.show() 
} 

} 

class MyUIAlertViewDelegate : NSObject, UIAlertViewDelegate { 
func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) { 
    print("click" + String(buttonIndex)) 
} 
} 

let delegate = MyUIAlertViewDelegate() 
let alert = UIAlertView(title: "warning", message: "This is a message", delegate: delegate, cancelButtonTitle: "Cancel") 
+0

спасибо вам большое. этот ответ действительно помогите мне! – aotian16

+0

Если этот ответ решает вашу проблему, значит, принимайте ответ. – Lydia

0

Попробуйте как этот

Подкласс как ViewController вместо NSObject

 class ViewController: UIViewController ,UIAlertViewDelegate{ 
      } 

кнопку Добавить в раскадровку или создать yourself.Then в кнопки действий добавить данный код.

 var alert = UIAlertView(title: " Your Title", message: "your message", delegate: self, cancelButtonTitle: "Ok", otherButtonTitles: "Cancel") 

    alert.alertViewStyle = UIAlertViewStyle.Default 

    alert.show() 

Тогда

  func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) { 
     println("click",buttonIndex) 

    if buttonIndex == 0 { 

     println("ok") 
    }else { 
     println("Cancel") 
    } 
     } 
} 

Вы можете настроить, как вам нужно Надеюсь, что это помогает

+0

да, это работает. но почему мой код не работает? Я думаю, что они одинаковые – aotian16

+0

попробуйте подкласс для просмотраконсолитора вместо nsobject. И там, где работает оповещение. Будет ваша кнопка. Нажмите – Lydia

+0

. Ваш комментарий полезна. Лидия и правильно, я думаю, что aotian16 просто хотел, чтобы их код исправлялся. Но приятное мышление с суб-классом –

0

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

функ displayAlert (название: String, сообщение: String) {

var alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert) 
    alert.addAction((UIAlertAction(title: "OK", style: .Default, handler: { (action) -> Void in 

     self.dismissViewControllerAnimated(true, completion: nil) 

    }))) 

    self.presentViewController(alert, animated: true, completion: nil) 


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