2016-07-25 1 views
0

У меня есть menuTablecontroller, в котором я взял пользовательскую ячейку с двумя ярлыками и другим внутренним контроллером tableview. Теперь в Innertableview у меня есть ItemCustomcell с двумя ярлыками и кнопкой. Я должен добавить Alertviewcontroller при нажатии этой кнопки. Я пытался путем создания протоколов в menuTabletablecontroller установить делегат, но он не работает ..Добавить UIAlertController в пользовательский UITableViewCell при нажатии кнопки с помощью быстрого кода?

Мои 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

My 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 не работает .. где я делаю ошибку или дать мне другую идею, чтобы добавить alertviewcontroller в пользовательских Tableview? ??

ответ

2

Вы забыли фактически установить делегат:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("itemCell") as! ItemTableViewCell 
    cell.delegate = // Your MenuTableViewController 
    return cell 
} 

EDIT с уведомлениями

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" ]) 
    } 
} 
+0

он показывает ошибку там, если я установил делегат e like ..... cell.delegate = MenuTableViewController –

+0

ошибка .. не может назначить значение типа MenuTablebiewController. Тип для ввода customPostcodeAlertDelegate –

+0

Думаю, вам нужны два делегата, потому что вы в двух шагах: «ItemTableViewCell -> SubcatTableViewCell - > MenuTableViewController'. Вы хотите общаться между ItemTableViewCell и MenuTableViewController, поэтому вам нужны два делегата. Вы также можете попробовать использовать NSNotificationCenter для отправки уведомления в MenuTableViewController. –

0

Вы не соответствуете требованиям MenuTableViewController к вашему протоколу. Вы должны соответствовать его как MenuTableViewController: UITableViewController, customPostcodeAlertDelegate

После этого вы можете переопределить его метод showAlert

+0

О Я забыл ... но все еще не работает. –

Смежные вопросы