2016-03-23 5 views
0

Так что я пытаюсь создать popover, который появляется при нажатии на представление внутри ячейки tableview. Вот что я пробовал до сих пор. Это то, что у меня есть в моем customcell:создать popper segue, щелкнув вид внутри ячейки tableview

class Cell: UITableViewCell { 

@IBOutlet weak var openingHoursView: CustomView! 

override func awakeFromNib() { 
    super.awakeFromNib() 
    let tap = UITapGestureRecognizer(target: self, action: Selector("openingHoursTap:")) 
    openingHoursView.addGestureRecognizer(tap) 
} 

override func setSelected(selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 
} 
} 

Это то, что я есть в моей точки зрения контроллера:

else if segue.identifier == "openingHours" { 
     var vc = segue.destinationViewController 
     var controller = vc.popoverPresentationController 
     if controller != nil { 
      controller?.delegate = self 
     } 
    } 

@IBAction func openingHoursTap(sender: UITapGestureRecognizer) { 
    performSegueWithIdentifier("openingHours", sender: self) 
} 


func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle { 
    return .None 
} 

идентификатор является правильным. Якорь предназначен для просмотра таблицы для segue. Раньше я никогда не создавал разрешаемое представление, но делал то же самое с кнопкой, и все было хорошо. Нет ошибок, приложение просто падает при нажатии на представление.

Я предполагаю, что это может быть связано со мной, не добавляя его в cellForRowAtIndexPath для отдельной ячейки. Как это сделать с представлением, если я не могу добавитьTarget?

+0

вы звоните 'openingHoursTap:' в вашей ячейке таблицы, но вашей фактической реализации 'openingHoursTap:' в ваш взгляд контроллера права? – TangZijian

+0

правильно, пытаясь реализовать его внутри моего стола. – luke

ответ

0

Вы вызываете openingHoursTap: в свою ячейку просмотра таблицы, но ваша фактическая реализация находится в вашем контроллере вида. Вот почему он падает. Таким образом, правильный способ сделать это - добавить распознаватель жестов в tableView: cellForRowAtIndexpath: в ваш контроллер.

Пример:

func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell")
let tap = UITapGestureRecognizer(target: self, action:Selector("openingHoursTap:"))
cell.openingHoursView.addGestureRecognizer(tap)
}

+0

Ах, да, имеет смысл, не мог понять, как добавить его в cellForRowAtIndexpath. Спасибо – luke

+0

Добро пожаловать. – TangZijian

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