当我按下此导航控制器中的后退按钮时,我想将开关的状态发送到另一个视图控制器中的变量。但是,没有调用prepareForSegue方法。我该如何解决这个问题?
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
print("here")
let secondViewController:ViewController2 = segue.destination as! ViewController2
if undoSwitch.isOn {
secondViewController.undoControls[0] = true
}
else {
secondViewController.undoControls[0] = false
}
}
答案 0 :(得分:0)
后退按钮与segue
不同。如果要在从当前视图控制器返回时重新加载undoSwitch
。其中一种方法是使用静态全局变量。像
class AppVar {
static var controlState = true
}
在您需要的地方更新您的AppVar.controlState并添加此
if AppVar.controlState {
secondViewController.undoControls[0] = true
}
else {
secondViewController.undoControls[0] = false
}
viewWillAppear
ViewController2
ViewController2
,viewWillAppear
被保留并存储在堆栈中。当您导航回到它时,将调用public static function getAllTimeLeaders($request) {
$competitionIds = self::getLasTwoSeason();
$data = DB::table('leader_board_stats as lbs')
->select([
DB::raw('AVG(sGamesStarted)'),
DB::raw('AVG(sMinutesAverage)'),
DB::raw('AVG(sPointsAverage)'),
DB::raw('AVG(sFieldGoalsMadeAverage)'),
DB::raw('AVG(sFieldGoalsAttemptedAverage)'),
DB::raw('AVG(sFieldGoalsPercentage)'),
DB::raw('AVG(sTwoPointersMadeAverage)'),
DB::raw('AVG(sTwoPointersAttemptedAverage)'),
DB::raw('AVG(sThreePointersMadeAverage)'),
DB::raw('AVG(sThreePointersAttemptedAverage)'),
DB::raw('AVG(sThreePointersPercentage)'),
DB::raw('AVG(sFreeThrowsMadeAverage)'),
DB::raw('AVG(sFreeThrowsAttemptedAverage)'),
DB::raw('AVG(sReboundsTotalAverage)'),
DB::raw('AVG(sAssistsAverage)'),
DB::raw('AVG(sStealsAverage)'),
DB::raw('AVG(sBlocksAverage)'),
DB::raw('AVG(sTurnoversAverage)'),
DB::raw('AVG(sFoulsPersonalAverage)'),
'firstName',
'familyName',
'personId',
'teamId',
'competitionId'
])
->where('lbs.periodNumber', '0')
->whereIn('lbs.competitionId', [$competitionIds[0]->competitionId, $competitionIds[1]->competitionId])
->groupBy('lbs.personId')
->get();
dd($data);
}
。
答案 1 :(得分:0)
重写您的self.navigationItem.leftBarButtonItem
,为其添加操作,并执行您想要的任何操作。
或者使用https://github.com/onegray/UIViewController-BackButtonHandler
答案 2 :(得分:0)
如果要将数据从ViewControllerA发送到ViewControllerB,您可以使用prepare for segue方法传递数据或实例化ViewControllerB故事板ID并访问其属性并传递数据。
如果您想反之亦然,即将数据从ViewControllerB传回ViewControllerA,您可以使用各种模式。授权,通知,Kvo或使用NSUserDefaults。
在您的情况下,委托模式将是最好的。将ViewController2指定为当前类的委托。并使用当前类的协议传递数据(在您的情况下控制状态)。在ViewController2中实现协议并访问交换机的控制状态并相应地执行。您可以在此主题中引用我之前的ans。查看我在Objective-C中的详细信息here。 希望能帮助到你。 Hapy Coding !!