2014-06-17 22 views
7

Tôi muốn thêm một hành động vào nút Thử lại, nhưng khi người dùng nhấn nút Thử lại không có gì xảy ra.Cách thêm hành động vào UIAlertView trong Swift (iOS 7)

var createAccountErrorAlert: UIAlertView = UIAlertView() 

createAccountErrorAlert.delegate = self     

createAccountErrorAlert.title = "Oops" 
createAccountErrorAlert.message = "Could not create account!" 
createAccountErrorAlert.addButtonWithTitle("Dismiss") 
createAccountErrorAlert.addButtonWithTitle("Retry") 

createAccountErrorAlert.show() 

Chức năng xác định chỉ mục của nút được nhấn?

func alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int){ 

    switch buttonIndex{ 

    case 1: 
     createAccount() 

    default: 
     //Some code here.. 

    } 
} 
+0

Làm thế nào có bạn đã cố gắng để gỡ lỗi này? Bạn đã đặt một điểm ngắt trong hàm để xem nó có cháy không? Bạn đã đặt một câu lệnh đăng nhập vào để xem 'buttonIndex' là gì? Đây là những điều đầu tiên tôi cần làm để nhân rộng lỗi bạn đang gặp phải. – wjl

Trả lời

22

tôi kiểm tra mã của bạn và nó đang làm việc tốt đối với tôi nó in kết quả tương ứng:

func showAlert(){ 
    var createAccountErrorAlert: UIAlertView = UIAlertView() 

    createAccountErrorAlert.delegate = self 

    createAccountErrorAlert.title = "Oops" 
    createAccountErrorAlert.message = "Could not create account!" 
    createAccountErrorAlert.addButtonWithTitle("Dismiss") 
    createAccountErrorAlert.addButtonWithTitle("Retry") 

    createAccountErrorAlert.show() 
} 

func alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int){ 

    switch buttonIndex{ 

    case 1: 
     NSLog("Retry"); 
    break; 
    case 0: 
     NSLog("Dismiss"); 
     break; 
    default: 
     NSLog("Default"); 
     break; 
     //Some code here.. 

    } 
} 

Nó in bỏ qua khi tôi bấm vào nút bỏ qua.

+0

Đối với những người có thể có một vấn đề: nó không hoạt động nếu bạn sử dụng "var createAccountErrorAlert = UIAlertView()" – kommradHomer

0

Đó là bởi vì các chỉ số của nút retry của bạn là 1, không phải 0. Nút sa thải có chỉ số 0.

Nếu bạn đặt đoạn mã sau vào một sân chơi, bạn sẽ thực sự thấy các chỉ số của các nút (như được ghi trên phương pháp addButtonWithTitle):

var createAccountErrorAlert: UIAlertView = UIAlertView() 
createAccountErrorAlert.title = "Oops" 
createAccountErrorAlert.message = "Could not create account!" 
createAccountErrorAlert.addButtonWithTitle("Dismiss") //Prints 0 
createAccountErrorAlert.addButtonWithTitle("Retry") //Prints 1 
+0

Nó không hoạt động với Chỉ mục 1. –

+0

Khi tôi thử mã của bạn, nó sẽ hoạt động. Bạn cũng có thể gửi mã trong phương thức createAccount() của mình không? Hoặc chỉ cần thử những gì @wjl đề xuất, đặt một điểm ngắt trong phương thức ủy nhiệm và kiểm tra giá trị chỉ mục. Hoặc đặt "println (buttonIndex)" trong phương thức ủy nhiệm và xem nội dung được in trên bảng điều khiển khi bạn nhấn nút thử lại. –

0

Chỉ mục sai. Phần sau (dựa trên mẫu ứng dụng mặc định của chế độ xem đơn iOS) hoạt động cho tôi (nơi tôi có dây để kích hoạt @IBAction buttonPressed). Đừng quên để làm cho bộ điều khiển xem của bạn một UIAlertViewDelegate (mặc dù các tác phẩm sau đây mà không làm như vậy):

import UIKit 

class ViewController: UIViewController, UIAlertViewDelegate { 

    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. 
    } 

    @IBAction func buttonPressed(sender : AnyObject) { 
     var createAccountErrorAlert: UIAlertView = UIAlertView() 

     createAccountErrorAlert.delegate = self 

     createAccountErrorAlert.title = "Oops" 
     createAccountErrorAlert.message = "Could not create account!" 
     createAccountErrorAlert.addButtonWithTitle("Dismiss") 
     createAccountErrorAlert.addButtonWithTitle("Retry") 

     createAccountErrorAlert.show() 
    } 

    func alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int) { 

     switch buttonIndex { 

     default: 
      println("alertView \(buttonIndex) clicked") 

     } 
    } 
} 
0

Heres cách tôi đã làm nó, với dòng ngắn mã:

func showAlert(){ 
    var alert = UIAlertView(title: "Choose", message: "Which_pill", delegate: self, cancelButtonTitle:"Red") 
    alert.addButtonWithTitle("Blue") 
    alert.show() 
} 

func alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int){ 
    switch buttonIndex{ 
    case 1: println("Blue") 
    case 0: println("Red") 
    default: println("Is this part even possible?") 
    } 
} 
Các vấn đề liên quan