我正在编写应用程序,如果用户在通话时查看应用程序,我需要更改视图.
我已经实现了以下方法:
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    NSLog(@"viewWillAppear:");
    _sv.frame = CGRectMake(0.0, 0.0, 320.0, self.view.bounds.size.height);
}
但是,当应用程序返回到前台时,它不会被调用.
我知道我可以实现:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameChanged:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil];
但我不想这样做.我宁愿将所有布局信息放在viewWillAppear:方法中,让它处理所有可能的场景.
我甚至试图从applicationWillEnterForeground:调用viewWillAppear:但我似乎无法确定当前哪个是当前的视图控制器.
有人知道处理这个问题的正确方法吗?我确定我错过了一个明显的解决方案.
我已经在我的iPhone应用程序代码中跟踪了一个问题,因为viewDidAppear方法并不总是触发.当您启动应用程序时,事件将按预期触发.但是,如果我使用能够进行多任务处理并重新打开的手机关闭应用程序.我的viewDidAppear事件不再触发.
我的视图是从Nibs加载的,我使用viewDidUnload来清理(释放和零所有出口).我的视图嵌套在侧面和标签栏然后导航控制器.当nib重新加载时,我看起来事件没有正确连线.我对错误/遗失的错误以及如何解决这个问题有所了解吗?
提前致谢.
更新我并不是说应用程序第一次进入前台时不会触发事件.我的意思是这个事件再也不会发生了.即使在标签之间切换或通过导航视图移动也是如此.
例:
- (void)viewDidAppear:(BOOL)animated {
   [super viewDidAppear:animated];
   NSLog(@"viewDidAppear called");
}
此代码放在两个视图中,每个视图位于不同的选项卡上.每次我在选项卡之间交换"viewDidAppear called"都会写入日志.当我关闭并重新打开应用程序并在标签之间切换时,不再发生这种情况.其他按钮事件正常启动.
我需要在 AppDelegate 的 ViewController 类中调用一个方法。这是该方法的样子:
class ViewController: UIViewController {
    func myFunction() {
        ...
    }
}
我试过使用 window.rootViewController,但它告诉我 myFunction 方法不存在,因为 rootViewController 是 UIViewController 类型。
我也试过
var vc = ViewController()
self.vc.myFunction()
但这正在创建 ViewController 类的新实例,这也不是我想要的。
这是我需要从中调用 myFunction 的 AppDelegate 代码部分:
class AppDelegate: UIResponder, UIApplicationDelegate {
    func handleEvent() {
        if UIApplication.shared.applicationState == .active {
            // call myFunction()
        }
        else {
            ...
        }
    }
}
上下文:我正在学习地理围栏教程:https ://www.raywenderlich.com/136165/core-location-geofencing-tutorial
由于即使关闭应用程序也会监视用户位置,因此触发事件时,应使用 AppDelegate 来处理该事件,因为视图控制器尚未加载。
在我处理事件的 AppDelegate 中,如果应用程序处于活动状态,我想弹出一个警报让用户选择停止监视位置。停止位置监控的功能 (myFunction) 位于视图控制器中。
每当我的应用程序到达前台时,我想刷新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 …如何在Xamarin iOS中做到这一点?
下面的链接在AppDelegate中提到了Xamarin的OnActivated方法,但是我如何订阅ViewController,以便它知道该应用何时来自后台?
https://forums.xamarin.com/discussion/10594/where-is-applicationdidbecomeactive-in-xamarin-ios
ios ×5
iphone ×3
objective-c ×2
cocoa-touch ×1
events ×1
ipad ×1
swift ×1
xamarin ×1
xamarin.ios ×1