【问题标题】:UI not updating on SWRevealViewController viewWillAppearUI 未在 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回到它。

标签: ios objective-c parse-platform swrevealviewcontroller


【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-07
      • 2015-03-20
      • 2015-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多