【问题标题】:how to show UIAlertController in a custom UITableViewCell in button click using swift code?如何使用快速代码在自定义 UITableViewCell 中显示 UIAlertController?
【发布时间】:2014-12-30 13:09:54
【问题描述】:

我想通过单击按钮在自定义 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

}

}

【问题讨论】:

    标签: ios iphone uitableview swift xcode6


    【解决方案1】:

    我找到了解决方案。以下是上述问题的代码。 为存在表视图的 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)
    
    }
    

    【讨论】:

      【解决方案2】:

      您试图在 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。

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

      【讨论】:

      • 我尝试了这个,但没有用。单击按钮时不显示警报。谢谢你的回答。
      • @IbadUrRahman 要完成这项工作,您应该设置您的委托:6)在您的 cellForRowAtIndexPath 函数中:deerNameCell.delegate = self
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多