How to show UIAlertController in a custom UITableViewCell when a button is clicked using quick code?

I want to show a UIAlertController in a custom UITableViewCell with the click of a button. but I cannot find any way for this. see below the code i tried. enter image description here

this code gives an error in the UITableViewCel, as shown in the figure above. please help me. All class code below:

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 way of locating other deer of her family group . This call can be used all year long.", "Grunts are a doe 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 the bucks way of asking her to stop so he can be breed with her.", "This sound 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 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 } 

}

+6
source share
2 answers

I found a solution. following code for the above question. write the following code for the button in the viewcontroller where the table view is present.

 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 } 

and funtion for warning in one view controller:

  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) } 
+7
source

You are trying to call presentViewController in a UITableViewCell , but instead this method is a member of the UIViewController .

Here is my suggestion:

1) Create the protocol CustomCellDeerCallsDelegate , i.e. ..:

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

2) Add a weak property to the custom cell:

 var delegate:CustomCellDeerCallsDelegate? 

3) In your clickDetialsInfoButton function, the method for the delegate is called:

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

4) Add a protocol implementation to the ViewController that hosts the table view that displays the cell.

5) In the protocol implementation of the showAlert function, show a warning:

 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) } 
+4
source

Source: https://habr.com/ru/post/980307/


All Articles