【问题标题】:Calling method in another view controller from modal view controller using a delegate使用委托从模态视图控制器调用另一个视图控制器中的方法
【发布时间】:2018-08-12 14:21:04
【问题描述】:

我正在使用模态转场来创建一个我想要关闭的视图控制器,然后在原始视图控制器中调用一个方法。我使用了协议/委托模式,但由于某种原因,该方法从未被调用。代码如下:请注意,我删除了很多不相关的代码以保持此处整洁

谢谢!!

VC1:

final class WorkoutViewController: UIViewController, StartWorkoutButtonDelegate {

weak var dataSource: WorkoutViewControllerDataSource!
private var workout: Workout!
private var workoutDataViewController: WorkoutDataViewController?
private var workoutFinishViewController: WorkoutFinishViewController?
private let workoutFinishViewControllerSegueIdentifier = "Workout Finish View Controller Segue"

@IBOutlet private var primaryActionButton: UIButton!
@IBOutlet private var pageControl: UIPageControl!

// MARK: - Handling View Lifecycle

override func viewDidLoad() {
    super .viewDidLoad()
    let workoutType = dataSource.workoutType(for: self)
    workout = Workout(workoutType: workoutType, managedObjectContext: persistentContainer.viewContext)
    setPrimaryActionButtonLabel()
}

// MARK: - Handling Storyboard Segues

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    super.prepare(for: segue, sender: sender)

    if let destinationWorkoutFinishViewController = segue.destination as? WorkoutFinishViewController {
        workoutFinishViewController = destinationWorkoutFinishViewController
    }
}

// MARK: - Managing Start and Pause 

@IBAction func startOrPauseWorkout() {
    if workout.isPaused {
        startWorkout()
    } else {
        pauseWorkout()
    }
}

}

VC 2:

protocol StartWorkoutButtonDelegate: AnyObject {
func startOrPauseWorkout()
 }

class WorkoutFinishViewController: UIViewController {

weak var delegate: StartWorkoutButtonDelegate?

@IBAction func startWorkout() {
    self.delegate?.startOrPauseWorkout()
    self.dismiss(animated: true, completion: nil)
}

@IBAction func finishWorkout() {
}

override func viewDidLoad() {
    super.viewDidLoad()

}
}

【问题讨论】:

    标签: ios swift delegates protocols swift4


    【解决方案1】:

    这里设置委托

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
       super.prepare(for: segue, sender: sender)
       if let destinationWorkoutFinishViewController = segue.destination as? WorkoutFinishViewController {
         destinationWorkoutFinishViewController.delegate = self
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-04-08
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 2011-12-29
      相关资源
      最近更新 更多