相关疑难解决方法(0)

为什么当应用程序从后台返回时,不会调用viewWillAppear?

我正在编写应用程序,如果用户在通话时查看应用程序,我需要更改视图.

我已经实现了以下方法:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    NSLog(@"viewWillAppear:");
    _sv.frame = CGRectMake(0.0, 0.0, 320.0, self.view.bounds.size.height);
}
Run Code Online (Sandbox Code Playgroud)

但是,当应用程序返回到前台时,它不会被调用.

我知道我可以实现:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameChanged:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil];
Run Code Online (Sandbox Code Playgroud)

但我不想这样做.我宁愿将所有布局信息放在viewWillAppear:方法中,让它处理所有可能的场景.

我甚至试图从applicationWillEnterForeground:调用viewWillAppear:但我似乎无法确定当前哪个是当前的视图控制器.

有人知道处理这个问题的正确方法吗?我确定我错过了一个明显的解决方案.

iphone objective-c viewwillappear ios

270
推荐指数
5
解决办法
13万
查看次数

应用程序进入前景后,viewDidAppear不会再次触发

我已经在我的iPhone应用程序代码中跟踪了一个问题,因为viewDidAppear方法并不总是触发.当您启动应用程序时,事件将按预期触发.但是,如果我使用能够进行多任务处理并重新打开的手机关闭应用程序.我的viewDidAppear事件不再触发.

我的视图是从Nibs加载的,我使用viewDidUnload来清理(释放和零所有出口).我的视图嵌套在侧面和标签栏然后导航控制器.当nib重新加载时,我看起来事件没有正确连线.我对错误/遗失的错误以及如何解决这个问题有所了解吗?

提前致谢.

更新我并不是说应用程序第一次进入前台时不会触发事件.我的意思是这个事件再也不会发生了.即使在标签之间切换或通过导航视图移动也是如此.

例:

- (void)viewDidAppear:(BOOL)animated {
   [super viewDidAppear:animated];
   NSLog(@"viewDidAppear called");
}
Run Code Online (Sandbox Code Playgroud)

此代码放在两个视图中,每个视图位于不同的选项卡上.每次我在选项卡之间交换"viewDidAppear called"都会写入日志.当我关闭并重新打开应用程序并在标签之间切换时,不再发生这种情况.其他按钮事件正常启动.

iphone events cocoa-touch ipad ios

9
推荐指数
2
解决办法
1万
查看次数

如何在应用程序委托的视图控制器中调用方法?

我需要在 AppDelegate 的 ViewController 类中调用一个方法。这是该方法的样子:

class ViewController: UIViewController {

    func myFunction() {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我试过使用 window.rootViewController,但它告诉我 myFunction 方法不存在,因为 rootViewController 是 UIViewController 类型。

我也试过

var vc = ViewController()
self.vc.myFunction()
Run Code Online (Sandbox Code Playgroud)

但这正在创建 ViewController 类的新实例,这也不是我想要的。

这是我需要从中调用 myFunction 的 AppDelegate 代码部分:

class AppDelegate: UIResponder, UIApplicationDelegate {

    func handleEvent() {
        if UIApplication.shared.applicationState == .active {
            // call myFunction()
        }
        else {
            ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

上下文:我正在学习地理围栏教程:https ://www.raywenderlich.com/136165/core-location-geofencing-tutorial

由于即使关闭应用程序也会监视用户位置,因此触发事件时,应使用 AppDelegate 来处理该事件,因为视图控制器尚未加载。

在我处理事件的 AppDelegate 中,如果应用程序处于活动状态,我想弹出一个警报让用户选择停止监视位置。停止位置监控的功能 (myFunction) 位于视图控制器中。

ios swift

6
推荐指数
1
解决办法
1万
查看次数

当app来到前台时如何刷新UIWebView?

每当我的应用程序到达前台时,我想刷新UIWebView.我在ViewController.m中真正拥有的是一种检查互联网访问(hasInternet)和viewDidLoad的方法.

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

@synthesize webview;

-(BOOL)hasInternet{
    Reachability *reach = [Reachability reachabilityWithHostName:@"www.google.com"];
    NetworkStatus internetStats = [reach currentReachabilityStatus];

    if (internetStats == NotReachable) {
        UIAlertView *alertOne = [[UIAlertView alloc] initWithTitle:@"You're not connected to the internet." message:@"Please connect to the internet and restart the app." delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
        [alertOne show];
    }

    return YES;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self hasInternet];
    [webView loadRequest: [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://warm-chamber-7399.herokuapp.com/"]] ];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c ios

3
推荐指数
1
解决办法
4948
查看次数

如何在Xamarin iOS中使用applicationDidBecomeActive?

如何在Xamarin iOS中做到这一点?

从后台打开应用程序时未调用ViewDidAppear

下面的链接在AppDelegate中提到了Xamarin的OnActivated方法,但是我如何订阅ViewController,以便它知道该应用何时来自后台?

https://forums.xamarin.com/discussion/10594/where-is-applicationdidbecomeactive-in-xamarin-ios

xamarin.ios nsnotificationcenter ios xamarin

2
推荐指数
1
解决办法
898
查看次数