Проверка, собирается ли UIViewController быть Вытолканным от стопки навигации?

Хорошо, чтобы сделать это, вы можете сделать это

User.findOne({ _id: req.user._id },(err,user)=>{
       if(err) throw err; 
       user.FieldYouWantToUpdate = req.body.name // likewise add your values

       // then save the document
       user.save();
     });

Здесь вы можете больше контролировать себя при обновлении с помощью mongoose. Что происходит, когда вы делаете запрос, используя идентификатор пользователя, и получаете пользователя. так что пользовательский объект может быть доступен в обратном вызове функции findOne (). После этого, используя пользовательский объект, вы можете изменять пользователя по своему желанию, может быть это одно поле, 2 поля, все поля, что вам нравится. Вы можете иметь полный контроль над обновлением

57
задан Jasarien 6 July 2015 в 08:30
поделиться

6 ответов

Я не думаю, что существует явное сообщение для этого, но Вы могли разделить на подклассы UINavigationController и переопределение - popViewControllerAnimated (хотя я не попробовал это передо мной).

, С другой стороны, при отсутствии других ссылок на контроллер представления, Вы могли бы добавить к - dealloc?

11
ответ дан Tom Elliott 24 November 2019 в 19:20
поделиться

Я должен был также препятствовать иногда появляться, таким образом, лучший ответ для меня был записан Orkhan Alikhanov. Но это не работало, потому что делегат не был установлен, таким образом, я сделал окончательную версию:

import UIKit

class CustomActionsNavigationController: UINavigationController, 
                                         UIGestureRecognizerDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        interactivePopGestureRecognizer?.delegate = self
    }

    override func popViewController(animated: Bool) -> UIViewController? {
        if let delegate = topViewController as? CustomActionsNavigationControllerDelegate {
            guard delegate.shouldPop() else { return nil }
        }
        return super.popViewController(animated: animated)
    }

    // important to prevent UI thread from freezing
    //
    // if popViewController is called by gesture recognizer and prevented by returning nil
    // UI will freeze after calling super.popViewController
    // so that, in order to solve the problem we should not return nil from popViewController
    // we interrupt the call made by gesture recognizer to popViewController through
    // returning false on gestureRecognizerShouldBegin
    func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        if let delegate = topViewController as? CustomActionsNavigationControllerDelegate {
            if !delegate.shouldPop() {
                return false
            }
        }

        // This if statement prevents navigation controller to pop when there is only one view controller
        if viewControllers.count == 1 {
            return false
        }

        return true
    }
}

protocol CustomActionsNavigationControllerDelegate {
    func shouldPop() -> Bool
}

ОБНОВЛЕНИЕ

я добавил viewControllers.count == 1 случай, потому что, если будет один контроллер в стеке, и пользователь делает жест, то заморозит UI Вашего приложения.

0
ответ дан 24 November 2019 в 19:20
поделиться

Возможно, Вы могли использовать navigationBar:shouldPopItem метод протокола UINavigationBarDelegate.

0
ответ дан François P. 24 November 2019 в 19:20
поделиться

Можно наблюдать уведомление:

- (void)viewDidLoad{
    [super viewDidLoad];
    [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(navigationControllerWillShowViewController:) name:@"UINavigationControllerWillShowViewControllerNotification" object:nil];
}

- (void)navigationControllerDidShowViewController:(NSNotification *)notification{
    UIViewController *lastVisible = notification.userInfo[@"UINavigationControllerLastVisibleViewController"];
    if(lastVisible == self){
        // we are being popped
    }
}
0
ответ дан 24 November 2019 в 19:20
поделиться

Вы можете поймать это здесь.

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {

    if (viewController == YourAboutToAppearController) {
            // do something
    }
}

Это сработает непосредственно перед отображением нового вида. Никто еще не переехал. Я все время использую магию перед asinine NavigationController. Вы можете устанавливать заголовки и заголовки кнопок и делать там что угодно.

8
ответ дан 24 November 2019 в 19:20
поделиться

Это работает для меня.

- (void)viewDidDisappear:(BOOL)animated
{
    if (self.parentViewController == nil) {
        NSLog(@"viewDidDisappear doesn't have parent so it's been popped");
        //release stuff here
    } else {
        NSLog(@"PersonViewController view just hidden");
    }
}
12
ответ дан 24 November 2019 в 19:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: