簡體   English   中英

如何使用swift代碼在按鈕單擊中在自定義UITableViewCell中顯示UIAlertController?

[英]how to show UIAlertController in a custom UITableViewCell in button click using swift code?

我想在按鈕單擊中在自定義UITableViewCell中顯示UIAlertController。 但我找不到任何辦法。 請看下面我試過的代碼。 在此輸入圖像描述

此代碼在UITableViewCel中給出錯誤,如上圖所示。 請幫幫我。全班代碼如下:

class CustomCellDeerCalls: UITableViewCell {

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

@IBOutlet weak var playButton: UIButton!
@IBOutlet weak var detialsInfoButton: UIButton!

@IBOutlet weak var DeerCallNameLabel: UILabel!

var arrayOfDetialsInfoDeerCalls: [String]=["This sound is a doe's way of locating other deer of her family group . This call can be used all year long.",
"Grunts are a doe's way of saying come here , also to call her fawns at feeding time . It is critical to keep the call soft as a loud grunt is too aggressive of a call.",
"A buck grunt is a deeper pitch than a doe grunt , it means the same thing . The older the buck the deeper the tone. ",
"As the buck chases the doe as the rut approaches he is frustrated, and makes a series of soft grunts while trailing her. It's the bucks way of asking her to stop so he can be breed with her.",
"This sound's a lot like a calf bawl , but it is a series of buck bleats. This signals the bucks desire for company.",
"This is a non aggressive and social behaviour that all bucks do after shedding their velvet . This is when the bucks learn who can whip the other . This process does not prevent serious fights later on during the rut.",
"This is the sound that a buck makes during the courtship when the doe stops running , but won't let the buck breed her. It's a non aggressive and frustration call by him.",
"This is the sound that a Doe makes to signal that her breeding time is near.",
"This is the sound that a Doe makes to signal that she ready to breed RIGHT NOW.",
    "Deer make this sound to intimidate other deer and prevent fights. This call is often made by a rut- crazed buck when confronted with a rival. This sound can send smaller buck running from the area.",
"Another rut crazed Bucks sound to intimidate other deer and prevent fights when confronted with a rival. This sound can also send smaller buck running from the area.",
"This is a short aggressive rattling sequence to possibly lure in less aggressive, but curious buck, as well as the local dominant whitetail buck of the area. To make this sound like a real fight sniffs, wheezes and grunts have also been thrown in for added effect."]


var arrayOfDeerSoundsCall: [String]=["CONTACT","doegrunt","bkgrunt","tend","bawl","spar","rage","estrusb","bellow","sniff","wheeze","rattle"]

// var arrayOfCallsName:[String] = [“”]

@IBAction func clickDetialsInfoButton(sender: AnyObject) {

   var alert = UIAlertController(title: "dddddd", message: arrayOfDetialsInfoDeerCalls[sender.tag], preferredStyle: UIAlertControllerStyle.Alert)
   alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))

self.presentViewController(alert, animated: true, completion: nil)
    //sender.sup
   //
}

var audioPlayer = AVAudioPlayer()


@IBAction func clickplayButton(sender: AnyObject) {

    println(sender.tag)

    var alertSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(arrayOfDeerSoundsCall[sender.tag], ofType: "wav")!)
    println(alertSound)

    // Removed deprecated use of AVAudioSessionDelegate protocol
    AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
    AVAudioSession.sharedInstance().setActive(true, error: nil)

    var error:NSError?
    audioPlayer = AVAudioPlayer(contentsOfURL: alertSound, error: &error)
    audioPlayer.prepareToPlay()
    audioPlayer.play()



}
override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}
func setCell(callName: String){

self.DeerCallNameLabel.text=callName

}

}

我找到了解決方案。 以下是上述問題的代碼。 在viewcontroller中為按鈕編寫以下代碼,其中存在表視圖。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let deerNameCell: CustomCellDeerCalls = tableView.dequeueReusableCellWithIdentifier("Cell") as CustomCellDeerCalls
    let deercallcell=arrayOfCallsName[indexPath.row]

    deerNameCell.DeerCallNameLabel.text=deercallcell.callName
    deerNameCell.playButton.tag=indexPath.row
    deerNameCell.detialsInfoButton.tag=indexPath.row
    deerNameCell.detialsInfoButton.addTarget(self, action: "showAlert:", forControlEvents:UIControlEvents.TouchUpInside)

    return deerNameCell

}

和相同視圖控制器中的警報功能:

   func showAlert(sender:UIButton!)
{
    println(sender.tag)
    let deercallcell=arrayOfCallsName[sender.tag]
    var alert = UIAlertController(title: deercallcell.callName, message: arrayOfDetialsInfoDeerCalls[sender.tag], preferredStyle: UIAlertControllerStyle.Alert)
    alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))

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

}

您正嘗試在UITableViewCell上調用presentViewController ,但此方法是UIViewController的成員。

這是我的建議:

1)創建CustomCellDeerCallsDelegate協議,即:

protocol CustomCellDeerCallsDelegate {
    func showAlert(title:String, message:String);
}

2)向自定義單元格添加弱屬性:

var delegate:CustomCellDeerCallsDelegate?

3)在clickDetialsInfoButton函數中調用委托上的方法:

self.delegate?.showAlert("DDDDD", message: arrayOfDetialsInfoDeerCalls[sender.tag])

4)將協議實現添加到ViewController,該ViewController承載顯示單元格的表視圖。

5)在showAlert函數的協議實現中 - 顯示警報:

func showAlert(title:String, message:String){
    var alert = UIAlertController(title: "dddddd", message: arrayOfDetialsInfoDeerCalls[sender.tag], preferredStyle: UIAlertControllerStyle.Alert)
    alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))

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

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM