我有menuTablecontroller,我在其中使用带有两个标签和另一个内部tableviewcontroller的customcell。现在在Innertableview中,我有一个带有两个标签和一个按钮的ItemCustomcell。我必须在单击此按钮时添加Alertviewcontroller。 我试过通过在menuTabletablecontroller中创建协议来设置委托,但它不起作用..
我的menutableviewcontroller
protocol customPostcodeAlertDelegate {
func showAlert(title:String,message:String)
}
class MenuTableViewController: UITableViewController {
func showAlert(title:String,message:String){
let alert = UIAlertController(title: "Choose Mode of Order", message:"", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "ok", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
}
.....
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("subcatcell", forIndexPath: indexPath)as! SubcatTableViewCell
return cell
}
现在在SubcatTableViewCell中,我的自定义单元格上有一个名为itemtableviewcell的按钮
我的SubcatTableViewCell
class SubcatTableViewCell: UITableViewCell,UITableViewDelegate,UITableViewDataSource {
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
InnerTableView.delegate = self
InnerTableView.dataSource = self
InnerTableView.bounces = false
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("itemCell")as! ItemTableViewCell
return cell
}
现在我在itemtableviewcell中像这样设置委托
class ItemTableViewCell: UITableViewCell {
var delegate: customPostcodeAlertDelegate?
@IBOutlet var itemName: UILabel!
@IBOutlet var itemPrice: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
@IBAction func OrderBtnPressed(sender: AnyObject) {
self.delegate?.showAlert("Choose Mode of Order", message: "")
}
}
但点击orderpressed按钮后,alertview控制器无法工作.. 我在哪里做错了或者给我另一个想法,在自定义tableview中添加alertviewcontroller ???
答案 0 :(得分:2)
您忘了实际设置代理:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("itemCell") as! ItemTableViewCell
cell.delegate = // Your MenuTableViewController
return cell
}
通知编辑
class MenuTableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.showAlert(_:)), name: "showError", object: nil)
}
func showAlert(sender: NSNotification) {
let title = sender.object!["title"]
let message = sender.object!["message"]
let alert = UIAlertController(title: "Choose Mode of Order", message:"", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "ok", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
}
....
}
class ItemTableViewCell: UITableViewCell {
@IBAction func OrderBtnPressed(sender: AnyObject) {
NSNotificationCenter.defaultCenter().postNotificationName("showError", object: [ "message" : "A message", "title" : "A Title" ])
}
}
答案 1 :(得分:0)
您没有将 MenuTableViewController 符合您的协议。你必须像MenuTableViewController: UITableViewController, customPostcodeAlertDelegate
然后您可以覆盖其方法showAlert