2016-10-30 9 views
0

У меня есть UITableViewRowAction, поэтому, когда я слажу, есть 3 варианта, из которых я могу выбрать. Если я нажму кнопку Call, я хочу, чтобы новый ViewController появлялся по всему экрану. И если я нажму на кнопку внутри нового ViewControllerЯ хочу, чтобы его увольняли.Я хочу открыть новый ViewController через UITableViewRowButtonAction

По щелчку на кнопке вызова открывает ViewController, как пирог My UITableViewRowAction

Это открывает после моего нажатия на кнопку, и это должно отклонить по щелчку на нижней х кнопки My ViewController as popover

Это мой код

func buttonToDismiss (sender: AnyObject) { 

    self.presentedViewController?.dismiss(animated: true, completion: nil) 
} 


func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? { 

    let callButton = UITableViewRowAction(style: .default, title: "Call", handler: { (action, indexPath) in 
     self.tableView.dataSource?.tableView?(
      self.tableView, 
      commit: .delete, 
      forRowAt: indexPath) 

     let vc = UIViewController(nibName: nil, bundle: nil) 
     vc.view.frame = CGRect(x: 0, y: 0, width: 100, height: 200) 
     vc.view.backgroundColor = UIColor(red: 62/255.0, green: 70/255.0, blue: 80/255.0, alpha: 1.0) 
     vc.modalPresentationStyle = .popover 


     let declineButton = UIButton() 
     declineButton.frame = CGRect(x: 150, y: 484, width: 75, height: 75) 
     declineButton.backgroundColor = UIColor(red: 36/255.0, green: 44/255.0, blue: 55/255.0, alpha: 1.0) 
     declineButton.tintColor = UIColor.white 
     declineButton.layer.cornerRadius = declineButton.frame.size.height/2 
     declineButton.layer.masksToBounds = true 
     declineButton.clipsToBounds = true 
     declineButton.setTitle("X", for: .normal) 
     declineButton.addTarget(self, action: Selector(("buttonToDismiss:")), for: UIControlEvents.touchUpInside) 
     vc.view.addSubview(declineButton) 
     let popover = vc.popoverPresentationController! 
     let cell = tableView.cellForRow(at: indexPath)! 

     var cellAbsolutePosition = cell.superview!.convert(cell.frame.origin, to: nil) 
     cellAbsolutePosition.x = cell.frame.width - 60 
     popover.sourceRect = CGRect(origin: cellAbsolutePosition, size: cell.frame.size) 
     popover.sourceView = tableView 

     self.present(vc, animated: true, completion: nil) 

     return 
    }) 

Я знаю, что код я считаю очень хаотичным, но я пока не очень хорошо разбираюсь в приложениях.

Я ценю любую помощь и благодарю вас за ваши усилия.

+0

Пожалуйста, опишите свой запрос чуть подробнее ... Загрузка изображений и уточнение ваших потребностей помогут нам лучше ориентироваться в этом вопросе. –

+0

Выше мой текущий код, и у меня есть контроллер вида с popOverPresentation, который похож на тот, что на картинке. Но я хочу добавить кнопку в контроллер вида, чтобы она исчезла, когда я нажимаю на кнопку, чтобы остановить контроллер представления, и снова появился контроллер родительского представления. Я загружаю еще две фотографии, чтобы лучше понять, что я имею в виду. – devtimg

+0

Почему вы используете простой 'UIViewController'? Создайте новый 'ViewController' в' xib/storyboard' вместо этого, создайте '@ IBAction' и подключите его к кнопке увольнения. – Adeel

ответ

0

Сделайте это вместо того, что вы делаете:

  1. Создайте ViewController, что вы хотите представить, когда call action выбран
  2. Поместите кнопку dismiss на этом ViewController и провода его к IBAction
  3. Когда пользователь выбирает call action, создайте экземпляр этого ViewController из storyboard и просто представьте его

Вот простой пример:

Скажи это ViewController, что вы хотите представить, когда действие вызова активируется View Controller to be presented


Instantiate и представить ViewController в call action

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? { 
    var rowActions = [UITableViewRowAction]() 

    let callAction = UITableViewRowAction.init(style: .default, 
               title: "Call") { (action, cellPath) in 
               //instantiate the view controller with storyboard ID 
               let vc = self.storyboard?.instantiateViewController(withIdentifier: "DetailViewController") as! DetailViewController 
               self.present(vc, animated: true, completion: { 

               }) 
    } 

    rowActions.append(callAction) 

    return rowActions 
} 


Просто провод u р ваша кнопка с IBAction

class DetailViewController: UIViewController { 

    var delegate: DetailDelegate? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    @IBAction func didTapBtn(_ sender: AnyObject) { 
     dismiss(animated: true, completion: nil) 
    } 
} 
+0

Большое спасибо за ваш ответ. Он отлично работает. – devtimg

+0

@devtimg Я счастлив спариваться. – Adeel

+0

Вы также можете поддержать ответ, если он вам помог – Adeel

0

Попробуйте этот код: Испытано в Swift 3.

MainVC:

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 
    } 

    func tableView(_ tableView: UITableView, shouldShowMenuForRowAt indexPath: IndexPath) -> Bool { 
    return true 
    } 

    func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? { 

    let callAction = UITableViewRowAction(style: UITableViewRowActionStyle.normal, title: "Call") { (UITableViewRowAction, NSIndexPath) -> Void in 
     self.performSegue(withIdentifier: "callSegue", sender: self) 
    } 

    let videoAction = UITableViewRowAction(style: UITableViewRowActionStyle.normal, title: "Video") { (UITableViewRowAction, NSIndexPath) -> Void in 
    } 

    let deleteAction = UITableViewRowAction(style: UITableViewRowActionStyle.normal, title: "Delete") { (UITableViewRowAction, NSIndexPath) -> Void in 
    } 

    callAction.backgroundColor = .blue 
    videoAction.backgroundColor = .green 
    deleteAction.backgroundColor = .red 

    return [deleteAction,videoAction,callAction] 

} 

DestVC

@IBAction func dissmissButton(_ sender: UIButton) { 

    dismiss(animated: true, completion: nil) 
} 
+0

Спасибо за помощь, но ответ выше уже работал на меня. Но я благодарен за ваши усилия – devtimg