2017-01-19 3 views
0

Я использую UIAlertController в UITableView. Он возвращает значение nil около tableview.delegate = self. Здесь alertC - это функция, которая представляет предупреждение. Я вызываю эту функцию alertC из tableViewCell при нажатии кнопки.UIAlertController в UITableView возвращает nil

class AdminPlaces: UIViewController, UITableViewDelegate, UITableViewDataSource { 

@IBOutlet weak var tableView: UITableView! 
private var placeNames = [String]() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.getDataFromFirebase { 
     self.tableView.delegate = self 
     self.tableView.dataSource = self 
     self.tableView.reloadData() 
    } 

    func alertC() { 
    let ac = UIAlertController(title: "Delete", message: "Are you sure to delete the place", preferredStyle: .alert) 
    let yesAction = UIAlertAction(title: "Yes", style: .default, handler: nil) 

    let noAction = UIAlertAction(title: "No", style: .cancel, handler: nil) 
    ac.addAction(yesAction) 
    ac.addAction(noAction) 
    self.present(ac, animated: true, completion: nil) 
} 

} 


class AdminPlacesCell: UITableViewCell { 

@IBOutlet weak var placeName: UILabel! 

@IBOutlet weak var delete: UIButton! 
@IBOutlet weak var edit: UIButton! 

override func awakeFromNib() { 
    edit.alpha = 0 
    delete.alpha = 0 
} 
func configure(place: String) { 
    placeName.text = place 
} 

func showButtons() { 
    UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseIn, animations: { 
     self.edit.alpha = 1 
     self.delete.alpha = 1 
    }, completion: nil) 

} 



@IBAction func onEditClicked(_ sender: Any) { 
} 
@IBAction func onDeleteClicked(_ sender: Any) { 
    let adminPlaces = AdminPlaces() 
    adminPlaces.alertC() 
} 
} 

Я не понимаю, в чем проблема. Почему он возвращает nil около tableView.delegate = self? Каков правильный путь todo?

Заранее спасибо

+0

Пожалуйста, проверьте эту ссылку, поскольку она решила мою проблему. [link] (http://stackoverflow.com/a/34911172/6223683) –

ответ

0

У вас есть пара проблем здесь. 1. alertC существует внутри ViewDidLoad. Переместите эту функцию отсюда. 2. Следующий код:

let adminPlaces = AdminPlaces() 
adminPlaces.alertC() 

говорит создать новый экземпляр AdminPlaces и вызвать alertC() на новый. Это не то же самое, что и в AdminPlaces, где tableView будет ячейкой. Новый не был представлен и, таким образом, не будет показывать предупреждение. 3. Ваше оповещение существует в ViewController, и ваша ячейка не имеет прямого доступа к ней.

Использование таблицы UITableViewDelegate tableView: commit: editingStyle. Когда пользователь удаляет ячейку из режима редактирования, этот метод вызывается. Вызовите метод alertC().

+0

Благодарим вас за ответ. Но я просто не написал функцию alertC() в viewDidLoad. Это была просто ошибка в моей копии. Любой, как спасибо. –

+0

Я получил ответ по этой ссылке. Любой, кто имеет такую ​​же проблему, может ссылаться на это. [Ссылка] (http://stackoverflow.com/a/34911172/6223683) –

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