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 路由器 $stateparams 未在 $state.go() 中注册