UI 未在 SWRevealViewController viewWillAppear 上更新

Posted

技术标签:

【中文标题】UI 未在 SWRevealViewController viewWillAppear 上更新【英文标题】:UI not updating on SWRevealViewController viewWillAppear 【发布时间】:2014-10-20 15:03:45 【问题描述】:

我目前正在使用 SWRevealController 进行滑出式导航。我遇到的问题是我的标签没有根据后端的更改正确更新。考虑到我在左导航(菜单)视图控制器中的代码,我认为每次菜单滑出时它都会更新新数据:

-(void)viewWillAppear:(BOOL)animated

 [super viewWillAppear:animated];
 PFUser *currentUser = [PFUser currentUser];
int currency = [[currentUser objectForKey:@"currency"] intValue];


    // Adding Image to ImageView
    PFFile *image = (PFFile *)[currentUser objectForKey:@"image"];
    [image getDataInBackgroundWithBlock:^(NSData *data, NSError *error)
        if (error)
        
            self.profileImage.image = [UIImage imageNamed:@"imagePlaceHolder"];

        
        else
        
            UIImage *userImage = [UIImage imageWithData:data];
            self.profileImage.image = userImage;
        
    ];

    self.userCurrency.text = [NSString stringWithFormat:@"%d hBux earned.", currency ];
    self.greetingMessage.text = [NSString stringWithFormat:@"Hello, %@!", [currentUser objectForKey:@"username"]];



我做错了吗?当然它不能进入​​ viewDidLoad,因为据我了解,它只在初始化时被调用一次?

【问题讨论】:

我不太熟悉 SWRevealViewController 是如何实现的,但是基于纯粹的猜测,我认为它可能使用addChildViewController 作为其侧边菜单,而其行为似乎是@987654323 @只在主VC显示时调用一次,而不是每次菜单滑出时调用。 所以你实现了你想要的,你可能想看看SWRevealViewController委托方法,它告诉你侧边菜单什么时候滑出,然后把这部分代码放在那里。跨度> 我不太确定它是一个子视图控制器。不过,我将看一下委托方法,看看它显示了什么。至于 viewWillAppear 我在其中放了一个 NSLog ,并且每次单击菜单时都会调用日志语句,所以我知道每次菜单出现时都会调用它,直到我完全关闭应用程序并继续之前不会更新 UI回到它。 【参考方案1】:

在您希望拥有侧边栏菜单的每个视图控制器中(在 SWRevealViewController 库中,它调用“前视图控制器”).m 文件在 viewDidLoad 方法中添加行 self.revealViewController.delegate = self,并在末尾添加以下行

#pragma mark - SWRevealViewController Delegate

- (void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position

    if (position == FrontViewPositionRight) 
       // do all the changes you did in viewWillAppear here
    

另外,不要忘记在 viewController 的 .h 文件中添加 SWRevealViewControllerDelegate:

@interface YourViewController : UIViewController<SWRevealViewControllerDelegate>

【讨论】:

【参考方案2】:

添加`self.revealViewController.delegate = self;在你的 ViewController.m didLoad 方法中。

添加,

- (void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position

 if (position == FrontViewPositionRight) 
    NSLog(@"When Slide Menu is Pushed");


if (position == FrontViewPositionLeft) 
    NSLog(@"When Slide is Popped out");   

添加@interface FirstViewController : UIViewController< SWRevealViewControllerDelegate > in your ViewController.h

【讨论】:

以上是关于UI 未在 SWRevealViewController viewWillAppear 上更新的主要内容,如果未能解决你的问题,请参考以下文章

选中的复选框未在 UI 中更新

UI 路由器 $stateparams 未在 $state.go() 中注册

onApprove 和 onDeny 未在模态中触发 - 语义 ui

UI 导航控制器中的右键未在 Monotouch 中显示

UI 未在 nifi 1.0.0 安全集群中打开

角度 8 应用程序 UI 未在 IE 中呈现