2014-12-30 2 views
6

Я хочу показать UIAlertController в пользовательском UITableViewCell нажатием кнопки. но я не могу найти для этого никакого способа. см. ниже код, который я попробовал. enter image description hereКак показать UIAlertController в пользовательском UITableViewCell при нажатии кнопки с помощью быстрого кода?

этот код дает ошибку в UITableViewCel, что показано на рисунке выше. пожалуйста, помогите me.The весь код класса ниже:

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"] 

// вар 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

я нашел решение. следующий код для вышеуказанного вопроса. напишите следующий код для кнопки в 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 

} 

и Funtion для предупреждения в том же контроллере представления:

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) 

} 
4

Вы пытаетесь вызвать presentViewController на UITableViewCell, но этот метод является членом 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, где размещается представление таблицы, которое отображает ячейку.

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) 

} 
+0

я попробовать это один, но не работает. предупреждение не отображается при нажатии кнопки. Спасибо за ответ. –

+1

Отличное решение! Делегированный метод работает отлично! – mathielo

+0

@IbadUrRahman Для выполнения этой работы вы должны установить свой делегат: 6) в функции 'cellForRowAtIndexPath':' deerNameCell.delegate = self' – magohamoth