第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

檢測(cè)何時(shí)在導(dǎo)航欄上按下“后退”按鈕

檢測(cè)何時(shí)在導(dǎo)航欄上按下“后退”按鈕

慕雪6442864 2019-12-10 10:02:44
在導(dǎo)航欄上按下后退按鈕(返回上一屏幕,返回到父視圖)時(shí),我需要執(zhí)行一些操作。有什么我可以實(shí)現(xiàn)的方法來(lái)捕獲事件并觸發(fā)一些操作以在屏幕消失之前暫停并保存數(shù)據(jù)?
查看完整描述

3 回答

?
一只斗牛犬

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊

根據(jù)一些評(píng)論,原始答案中的解決方案在iOS 8+中的某些情況下似乎不起作用。如果沒(méi)有更多詳細(xì)信息,我無(wú)法驗(yàn)證實(shí)際情況。


對(duì)于那些在那種情況下的人,還有另一種選擇。可以通過(guò)覆蓋檢測(cè)何時(shí)彈出視圖控制器willMove(toParentViewController:)。基本思想是在parentis 時(shí)彈出視圖控制器nil。


請(qǐng)查看“實(shí)現(xiàn)Container View Controller”以了解更多詳細(xì)信息。


從iOS 5開(kāi)始,我發(fā)現(xiàn)處理這種情況的最簡(jiǎn)單方法是使用新方法- (BOOL)isMovingFromParentViewController:


- (void)viewWillDisappear:(BOOL)animated {

  [super viewWillDisappear:animated];


  if (self.isMovingFromParentViewController) {

    // Do your stuff here

  }

}

- (BOOL)isMovingFromParentViewController 當(dāng)您在導(dǎo)航堆棧中推入和彈出控制器時(shí)很有意義。


但是,如果要呈現(xiàn)模式視圖控制器,則應(yīng)- (BOOL)isBeingDismissed改用:


- (void)viewWillDisappear:(BOOL)animated {

  [super viewWillDisappear:animated];


  if (self.isBeingDismissed) {

    // Do your stuff here

  }

}

如本問(wèn)題所述,您可以結(jié)合使用以下兩個(gè)屬性:


- (void)viewWillDisappear:(BOOL)animated {

  [super viewWillDisappear:animated];


  if (self.isMovingFromParentViewController || self.isBeingDismissed) {

    // Do your stuff here

  }

}

其他解決方案依賴于的存在UINavigationBar。相反,更喜歡我的方法,因?yàn)樗箞?zhí)行任務(wù)所需的任務(wù)與觸發(fā)事件的操作(即按后退按鈕)分離。


查看完整回答
反對(duì) 回復(fù) 2019-12-10
?
尚方寶劍之說(shuō)

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊

雖然viewWillAppear()和viewDidDisappear() 被當(dāng)返回按鈕被竊聽(tīng)叫,它們也被稱為在其他時(shí)間。有關(guān)更多信息,請(qǐng)參見(jiàn)答案結(jié)尾。


使用UIViewController.parent

當(dāng)借助willMoveToParentViewController(_:)OR 將VC從其父級(jí)(NavigationController)中刪除時(shí),最好檢測(cè)到后退按鈕didMoveToParentViewController()


如果parent為零,則將視圖控制器從導(dǎo)航堆棧中彈出并關(guān)閉。如果parent不為nil,則將其添加到堆棧中并顯示。


// Objective-C

-(void)willMoveToParentViewController:(UIViewController *)parent {

     [super willMoveToParentViewController:parent];

    if (!parent){

       // The back button was pressed or interactive gesture used

    }

}



// Swift

override func willMove(toParent parent: UIViewController?) {

    super.willMove(toParent: parent)

    if parent == nil {

        // The back button was pressed or interactive gesture used

    }

}

換出willMove了didMove和檢查self.parent做工作后視圖控制器被駁回。


停止解雇

請(qǐng)注意,如果需要執(zhí)行某種異步保存,則檢查父級(jí)不允許您“暫停”過(guò)渡。為此,您可以實(shí)現(xiàn)以下內(nèi)容。唯一的缺點(diǎn)是,您失去了精美的iOS樣式/動(dòng)畫(huà)后退按鈕。在此處也要小心使用交互式滑動(dòng)手勢(shì)。使用以下內(nèi)容處理這種情況。


var backButton : UIBarButtonItem!


override func viewDidLoad() {

    super.viewDidLoad()


     // Disable the swipe to make sure you get your chance to save

     self.navigationController?.interactivePopGestureRecognizer.enabled = false


     // Replace the default back button

    self.navigationItem.setHidesBackButton(true, animated: false)

    self.backButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: self, action: "goBack")

    self.navigationItem.leftBarButtonItem = backButton

}


// Then handle the button selection

func goBack() {

    // Here we just remove the back button, you could also disabled it or better yet show an activityIndicator

    self.navigationItem.leftBarButtonItem = nil

    someData.saveInBackground { (success, error) -> Void in

        if success {

            self.navigationController?.popViewControllerAnimated(true)

            // Don't forget to re-enable the interactive gesture

            self.navigationController?.interactivePopGestureRecognizer.enabled = true

        }

        else {

            self.navigationItem.leftBarButtonItem = self.backButton

            // Handle the error

        }

    }

}



將顯示更多視圖

如果您沒(méi)有遇到viewWillAppear viewDidDisappear問(wèn)題,我們來(lái)看一個(gè)例子。假設(shè)您有三個(gè)視圖控制器:


ListVC:事物的表視圖

DetailVC:關(guān)于事物的詳細(xì)信息

SettingsVC:某些選項(xiàng)

detailVC當(dāng)您從listVC轉(zhuǎn)到settingsVC并返回到時(shí),可以跟蹤上的呼叫l(wèi)istVC


列表>詳細(xì)信息(按下detailVC)Detail.viewDidAppear<-出現(xiàn)

詳細(xì)信息>設(shè)置(按下settingsVC)Detail.viewDidDisappear<-消失


然后回頭...

設(shè)置>詳細(xì)信息(彈出設(shè)置 VC)<- Detail.viewDidAppear出現(xiàn)

詳細(xì)信息>列表(彈出詳細(xì)信息 VC)Detail.viewDidDisappear<-消失


請(qǐng)注意,viewDidDisappear不僅在返回時(shí),而且在前進(jìn)時(shí),都會(huì)多次調(diào)用它。對(duì)于可能需要的快速操作,但是對(duì)于更復(fù)雜的操作(例如要保存的網(wǎng)絡(luò)呼叫),可能不需要。


查看完整回答
反對(duì) 回復(fù) 2019-12-10
?
呼啦一陣風(fēng)

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊

第一種方法


- (void)didMoveToParentViewController:(UIViewController *)parent

{

    if (![parent isEqual:self.parentViewController]) {

         NSLog(@"Back pressed");

    }

}

第二種方法


-(void) viewWillDisappear:(BOOL)animated {

    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) {

       // back button was pressed.  We know this is true because self is no longer

       // in the navigation stack.  

    }

    [super viewWillDisappear:animated];

}


查看完整回答
反對(duì) 回復(fù) 2019-12-10
  • 3 回答
  • 0 關(guān)注
  • 820 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)