小编ale*_*mix的帖子

在AppDelegate.m的屏幕上获取当前显示的UIViewController

UIViewController屏幕上的当前需要通过设置徽标视图来响应来自APN的推送通知.但我怎么能得到UIViewControllerin方法application:didReceiveRemoteNotification:AppDelegate.m

我尝试使用self.window.rootViewController获取当前显示UIViewController,它可能是一种UINavigationViewController或其他类型的视图控制器.我发现可以用来获取屏幕上的visibleViewController属性.但如果它不是,我该怎么办?UINavigationViewControllerUIViewControllerUINavigationViewController

任何帮助表示赞赏!相关代码如下.

AppDelegate.m

...
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

    //I would like to find out which view controller is on the screen here.

    UIViewController *vc = [(UINavigationViewController *)self.window.rootViewController visibleViewController];
    [vc performSelector:@selector(handleThePushNotification:) withObject:userInfo];
}
...
Run Code Online (Sandbox Code Playgroud)

ViewControllerA.m

- (void)handleThePushNotification:(NSDictionary *)userInfo{

    //set some badge view here

}
Run Code Online (Sandbox Code Playgroud)

iphone uiviewcontroller push-notification ios

119
推荐指数
10
解决办法
17万
查看次数

UIRefreshControl - iOS 7中的Pull to Refresh

我正试图在我的表视图中获得iOS 7上的pull to refresh功能.在我viewDidLoad,我有:

refreshControl = [[UIRefreshControl alloc] init];
[self.mytableView setContentOffset:CGPointMake(0, refreshControl.frame.size.height) animated:YES];
[refreshControl beginRefreshing];
[refreshControl addTarget:self action:@selector(refreshTable) forControlEvents:UIControlEventValueChanged];
Run Code Online (Sandbox Code Playgroud)

然后我跑:

-(void)refreshTable {
    [self.mytableView reloadData];
    [refreshControl endRefreshing];
}
Run Code Online (Sandbox Code Playgroud)

在iOS 6上,这意味着当你向下拉动表格视图时,它会显示在你拉动时伸展的圆形箭头,并且在拉得足够远之后,它会刷新.现在,我看不到圆形箭头.我错过了什么?

objective-c uitableview ios

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

屏幕叠加检测到阻止Android权限

我注意到我的新手机上的Android应用程序存在一个奇怪的问题.SDK 23权限弹出窗口(如外部存储)将被下面附加的警报阻止.我最初认为这与我的手机有关,但它似乎并没有影响我的任何其他安装的应用程序.

这个问题可能与安装调试版本有关,还是我的权限处理有问题?我认为它可能与我正在使用的其中一个广告平台有关但我尝试禁用它们仍然出现了

在此输入图像描述

我已经粘贴了下面生成此权限请求的图像保存功能.我正在使用Dexter来编写一大堆可怕的样板文件

public static void saveToExternalStorageIfAllowed(final Context context, final Bitmap bitmapImage, final String title) {
    final Tracker t = ((LoLHistory) context.getApplicationContext()).getTracker(LoLHistory.TrackerName.APP_TRACKER);

    // saving to publicly visible/accessible folder. Requires write permission
    int permissionCheck = ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE);
    if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
        // do not have permissions to write, request
        t.send(new HitBuilders.EventBuilder()
                .setCategory("FILE")
                .setAction("PermissionMissing")
                .setLabel("WRITE_EXTERNAL")
                .build());
        Dexter.checkPermission(new PermissionListener() {
            @Override
            public void onPermissionGranted(PermissionGrantedResponse response) {
                t.send(new HitBuilders.EventBuilder()
                        .setCategory("FILE")
                        .setAction("PermissionGranted")
                        .setLabel("WRITE_EXTERNAL")
                        .build());

                saveToExternalStorage(context, bitmapImage, title);
            }

            @Override
            public void …
Run Code Online (Sandbox Code Playgroud)

permissions android oneplusthree

42
推荐指数
2
解决办法
3万
查看次数

检查iOS 7或更早版本的最佳方法?

我需要根据我运行的iOS版本重新配置一些UI,所以我需要一个检查iOS版本的好方法.暂时我这样做:

if ([[[UIDevice currentDevice] systemVersion] isEqualToString: @"7.0"]) {
    //do stuff
}
Run Code Online (Sandbox Code Playgroud)

我不想硬编码这些字符串比较并根据它做出决定.有没有更好的方法来做到这一点?

ios ios6 ios7

41
推荐指数
2
解决办法
4万
查看次数

如何从半透明平滑过渡到不透明的UINavigationBar iOS?

UINavigationBar在视图之间转换时,我遇到了重新配置iOS 7和8的问题.

我的应用程序目前包含以下UIViewController流程:

VC1 - > VC2 - > VC3

在这个流程中

  • VC1是主屏幕,不透明 UINavigationBar
  • VC2有半透明的 UINavigationBar
  • VC3又回到了不透明状态 UINavigationBar

我遇到的问题是这些视图之间的转换看起来都非常草率.首先,我尝试了以下内容:

在VC2中

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    // configure appearance
    [self.navigationController.navigationBar configureTranslucentAppearance];
}
Run Code Online (Sandbox Code Playgroud)

并在VC1和VC3中

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    // configure appearance
    [self.navigationController.navigationBar restoreDefaultAppearance];
}
Run Code Online (Sandbox Code Playgroud)

以下是上面列出的两个辅助函数的实现:

- (void)restoreDefaultAppearance {
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

    [self setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor JTTextNavBar]}];
    [self setTintColor:[UIColor JTTextNavBar]];
    [self setBarTintColor:[UIColor JTBackgroundNavBarWithAlpha:1.0]];
    [self setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
    [self setBackgroundColor:[UIColor JTBackgroundNavBarWithAlpha:1.0]];
    [self setShadowImage:[UIImage navigationBarShadowImage]];
    [self setTranslucent:NO];
}

- (void)configureTranslucentAppearance { …
Run Code Online (Sandbox Code Playgroud)

objective-c uinavigationbar ios

28
推荐指数
2
解决办法
9068
查看次数

将Facebook SDK更新为3.5后无法打开活动会话

在将Facebook sdk更新为3.5后,当尝试执行openActiveSessionWithReadPermissions时,操作失败.以下是打开会话和处理回调的代码段:

[FBSession openActiveSessionWithReadPermissions:@[@"email", @"user_hometown", @"user_location", @"user_birthday"]
                                   allowLoginUI:YES
                              completionHandler:
 ^(FBSession *session,
   FBSessionState state, NSError *error) {
     switch (state) {
         case FBSessionStateCreatedTokenLoaded:
         case FBSessionStateOpenTokenExtended:
         case FBSessionStateOpen:
         {
             completion(TRUE);
             break;
         }
         case FBSessionStateClosed:
         case FBSessionStateClosedLoginFailed:
             completion(FALSE);
             [FBSession.activeSession closeAndClearTokenInformation];
             break;
         default:
             break;
     }
 }];
Run Code Online (Sandbox Code Playgroud)

我最终在FBSessionStateClosedLoginFailed情况下,我得到一个FBSKLog如下:

FBSDKLog: Cannot use the Facebook app or Safari to authorize, fb123456789012345 is not registered as a URL Scheme
Run Code Online (Sandbox Code Playgroud)

facebook ios

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

应该使用什么模式来解析java中的RFC 3339日期时间字符串

这似乎是一个具有许多不同答案的常见问题.在你回答之前,我已经使用了joda-timeatomdate,它们运行得很好.我对此感兴趣的不是使用哪个库,而是澄清了如何在java中定义RFC模式.


研究

根据我的理解和答案, RFC 3339是ISO 8601的简介.PHP 清楚地定义了RFC 3339日期时间模式Y-m-d\TH:i:sP.如果我们将这个定义转移到java 7(据我所知),我们最终会得到这个(在这个答案中也会提到):

// example "2005-08-15T15:52:01+00:00"
pattern = "yyyy-MM-dd'T'HH:mm:ssXXX";
Run Code Online (Sandbox Code Playgroud)

但是,像这样的一些堆栈溢出答案指向其中一个(或两者)作为RFC 3339的正确模式

// example "2016-11-01T20:44:39Z"
pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'";

// example "1937-01-01T12:00:27.87Z"
pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
Run Code Online (Sandbox Code Playgroud)

为了进一步复杂化,官方RFC 3339文档列出了以下所有这些示例(我添加了我认为它们的相应模式):

// 1996-12-19T16:39:57-08:00
pattern = "yyyy-MM-dd'T'HH:mm:ssXXX";

// 1990-12-31T23:59:60Z
pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'";

// 1990-12-31T15:59:60-08:00
pattern = "yyyy-MM-dd'T'HH:mm:ssXXX";

// 1937-01-01T12:00:27.87+00:20
pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
Run Code Online (Sandbox Code Playgroud)

附注: Android不支持XXX时区模式,但您可以ZZZZZ根据此答案使用.

我认为让我感到困惑的部分原因是我总是看到RFC 822和RFC 2822各自特别提到了一个模式,所以我假设RFC 3339也可以归结为单个模式匹配:

static String RFC_822 …
Run Code Online (Sandbox Code Playgroud)

java datetime rfc rfc3339

10
推荐指数
1
解决办法
7602
查看次数

一次解除多个模态视图控制器时的视觉伪像

我一直在努力寻找这个问题的答案.我通过以下方式构建了一堆模态:

[[[NavA viewControllers] objectAtIndex:0] presentViewController:NavB animated:YES completion:NULL];
[[[NavB viewControllers] objectAtIndex:0] presentViewController:NavC animated:YES completion:NULL];
Run Code Online (Sandbox Code Playgroud)

当我想同时解雇NavANavB模态时,我打电话给

[[[NavA viewControllers] objectAtIndex:0] dismissViewControllerAnimated:YES completion:NULL];
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作,除了有一个简短的闪存,你可以看到NavB,因为完整的堆栈被解雇了.

我走过了调试器,看起来在动画开始之前,NavC立即消失,NavB用动画解散.

有没有办法避免这种视觉神器,并且整个堆栈在动画的整个持续时间内可以使NavC平滑地消失

编辑:为了澄清,我提出的UINavigationController不是UIViewController因为这个流程是供用户登录的,而且有多个可能的分支可以返回到当前阶段,例如NavC(LoginPage),NavB(带登录和注册按钮的LandingPage)或所有返回根目录,NavA(应用程序的主页面).在iOS文档中,它们呈现了与相机类似的设计模式,其中每个舞台呈现UINavigationController多个可能的视图控制器https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html

objective-c uiviewcontroller modalviewcontroller ios

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

如何获得广播状态Steam API

我有一个"跟随"蒸汽用户的列表,我正在尝试找到一个端点来轮询当前正在广播的端点.我最初试图根据Steam用户的一些属性来确定这一点,即:

  • 角色状态
  • 简介状态
  • 社区可见性状态
  • 游戏信息

看起来这对你的朋友来说只是勉强有用,因为朋友只有在网上和游戏中才能流式传输(从我能说的话).

对于非朋友来说,似乎他们根本就没有联系.游戏信息可以隐藏,但它们仍然可以公开流式传输.离线用户和具有私人配置文件的用户也可以运行公共广播.必须有某种端点来检查用户当前的广播状态吗?

我探索的一个解决方案是快速加载MPD,但是使用该端点还会触发用户流的启动,该流由于没有观看者而当前处于非活动状态,我不想这样做.

主要问题似乎是缺乏文件.我发现的最好的是一些第三方网站:https://lab.xpaw.me/steam_api_documentation.html它只列出了一些与广播相关的端点

java steam-web-api steam

9
推荐指数
0
解决办法
223
查看次数

以编程方式删除GridView周围的额外空间

我正在尝试GridView在我的java类中以编程方式进行编译,一切正常.问题是周围自动生成的5像素填充GridView.在xml中我设法使用以下方法删除它:

android:listSelector="@null"
Run Code Online (Sandbox Code Playgroud)

但我无法在java中做任何类似的事情.我尝试了一些解决方法,比如使GridView实际屏幕大10像素,没有运气.

有没有人有这个代码?

编辑:

我的答案并没有解决问题.仍然有赏金.这是我的GridView代码:

    GridView gridView = new GridView(this);
    gridView.setNumColumns(someInt);
    gridView.setAdapter (new MyCustomAdapter(this));
    gridView.setLayoutParams(new GridView.LayoutParams(
            customValue,
            LayoutParams.FILL_PARENT,
            Gravity.CENTER_HORIZONTAL)
    );
Run Code Online (Sandbox Code Playgroud)

android gridview

8
推荐指数
2
解决办法
5743
查看次数