小编lia*_*ols的帖子

在UIPopoverController中显示UIImagePickerController与现有的UINavigationController(添加后退按钮)

所以我有一个UIPopoverController房子UINavigationController,我有我的地方UITableViewController但是我的一个选择UITableView是去选择一个图像与UIImagePickerController...现在在iPhone上,我可以简单地使用presentModalViewController:animated:但是从UIPopoverController内调用,导致崩溃,所以这不可能...

我也知道UIImagePickerController它自己的需求UINavigationController所以我不能只推动pushViewController:animated:......

所以我想出如果我保留了UIPopoverController我创建的链接,那么我可以setContentViewController:animated:用来切换到UIImagePickerController的viewController ......

但是,我现在坚持让用户回到之前的方式,UINavigationController因为我需要能够添加一个取消按钮UIImagePickerController但是当我尝试这样做时,取消按钮将不会被添加...

继承我正在使用的代码

-(void)doPhotoalbums {
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {

        UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
        [imagePicker setDelegate:self];
        [imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
        [imagePicker setContentSizeForViewInPopover:CGSizeMake(320, 480)];

        UIBarButtonItem *cancel = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:nil];
        [imagePicker.navigationItem setLeftBarButtonItem:cancel];

        //[self presentModalViewController:imagePicker animated:YES];
        [[self parentPopoverController] setContentViewController:imagePicker animated:YES];

    } else {
        [UIAlertView showMessage:@"This device does not have any photo albums."]; …
Run Code Online (Sandbox Code Playgroud)

objective-c uikit uiimagepickercontroller uipopovercontroller ios

11
推荐指数
1
解决办法
4531
查看次数

MFMailComposeViewController忽略了iOS 7中的一些UIAppearance协议

我有一个仅限iOS 7的应用程序,它使用UIAppearance来为整个应用程序中的UINavigationBar设置样式.

我的AppDelegate中有以下代码:

[[UINavigationBar appearance] setBackgroundImage:redImage forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearanceWhenContainedIn:[MFMailComposeViewController class], nil] setBackgroundImage:blueImage forBarMetrics:UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)

但是,MFMailComposeViewController会出现redImage背景!

文档说明如下:

要点:此类的视图层次结构是私有的,您不能修改它.但是,您可以使用UIAppearance协议自定义实例的外观.

所以没有理由说上面的内容不起作用,我100%肯定redImage并且blueImage是不同颜色的图像.

还有其他人遇到过这个问题吗?我猜它是iOS 7中的一个错误但我没有时间检查iOS 6(我通过使用iPad 4得到这些结果).

objective-c messageui ios uiappearance ios7

7
推荐指数
1
解决办法
1133
查看次数

layoutAttributesForSupplementaryViewOfKind:atIndexPath:传入不正确的indexPath

我有一个自定义UICollectionViewLayout,使用补充视图将页脚放在每页的底部.

这似乎一直很好,直到我开始在页面底部插入单元格.

由于补充视图必须链接到UICollectionView中的NSIndexPath,因此在我的准备布局方法中,我检测页面上的最后一个单元格,然后将补充视图的layoutAttributes存储到页面上的最后一个indexPath.

这是插入新单元格之前的集合视图布局:

    |- Page 1
    |-- [0, 0]
    |-- [0, 1]
    |-- [0, 2]
    |- Footer (indexPath [0, 2])
    |- Page 2
    |-- [1, 0]
    |-- [1, 1]
    |- Footer (indexPath [1, 1])
Run Code Online (Sandbox Code Playgroud)

正如所料,我的prepareLayout方法UICollectionViewLayoutAttributes为indexPaths [0, 2][1, 1].创建和存储.
layoutAttributesForSupplementaryViewOfKind:atIndexPath:方法也被调用两次返回indexPaths的正确属性([0, 2][1, 1])

现在的问题是,当我在索引处插入一个新单元格时,[1, 2]prepareLayout方法正确地重新计算布局并将第二个页脚的indexPath更改为[1, 2]您所期望的.

但是,当layoutAttributesForSupplementaryViewOfKind:atIndexPath:再次调用以更新接口时,其indexPath属性仍会返回[1, 1].然后在方法上返回nil,因为它不存在并导致崩溃(显然)!

为什么layoutAttributesForSupplementaryViewOfKind:atIndexPath:仍然返回不正确的(旧)indexPath?我已经检查过布局是否无效以及我存放layoutAttributes的footerAttributes字典是否有正确的(新)indexPath所以从我读过的内容应该可以正常工作?

同样重要的是要注意,这只发生在动画插入时...只是调用reloadData不会崩溃.

此外,我无法将补充视图链接到单个部分,因为我的自定义布局旨在分页collectionView,并且部分可以溢出到不同的页面上,这意味着每个部分有多个补充视图.

这是我的布局.m文件的要点:https …

animation objective-c ios uicollectionview uicollectionviewlayout

6
推荐指数
0
解决办法
1250
查看次数

GoogleSignIn iOS - 禁用SFSafariViewController

我正在为我们的一个客户开发一个企业应用程序,该应用程序使用GoogleSignIn SDK作为登录选项.

在开发过程中,我惊讶地发现SFSafariViewController已经添加了支持,这意味着我可以通过共享Safari cookie来简化我的登录过程.

这一切都很棒,直到客户提出一个关键问题,即一旦用户登录应用程序(通过Google和SFSafariViewController),他们就可以退出我们的应用程序(包括GoogleSignIn SDK(见下文))

func signOut() {
    ...
    let signIn = GIDSignIn.sharedInstance()
    signIn.signOut()
}
Run Code Online (Sandbox Code Playgroud)

但是,用户仍然通过Safari登录其Google帐户.对个人设备非常有用的东西,但我被告知单个站点上有20个人可能使用单个设备.

我已经看了设置allowsSignInWithBrowser和/或allowsSignInWithWebViewfalse然而,这样的SDK将只使用一个Web视图(如我不能让它UIWebViewWKWebView)在这里我们可以确保证书将只在应用程序内持续存在.

是否有这样的功能来实现这一点,我错过了?我认为在某些用例中这种配置可用是非常关键的.

ios google-signin sfsafariviewcontroller

6
推荐指数
0
解决办法
363
查看次数

检查特定端口打开的本地设备的专用网络(iPhone/Objective C)

我花了一整天时间在我的 Mac 和 iPhone 之间创建一个系统,我使用cocoaasyncsocket在我的 mac 上创建了一个监听服务器,在我的 iPhone 上创建了一个客户端。基本思想是在计算机打开时让 mac 上的应用程序运行,然后当我希望从 iPhone 应用程序传输数据时,启动应用程序并连接并发送数据......我让这个系统正常工作我希望它如何运行,但是我有一个问题,我总共花了大约 4 个小时试图解决这个问题!

我想创建一些东西,在侦听器运行的情况下为我的 mac 扫描我的无线网络……我认为这很简单,但我错了。我在此案上进行了高低搜索,但没有运气,我使用 stackoverflow 作为最后的手段。

我目前的计划是通过检索 iPhone 的内部 IP(即 192.168.1.94)来“自动扫描”,然后使用它来确定网络上的其他 IP(192.168.1.0-254),现在我知道 IP 是什么扫描我可以遍历每个并检查端口是否打开/我得到响应。

现在我想尽快做到这一点,但是我无法得到任何东西来给我准确的结果......

connectToAddress:error:在 cocoaasyncsocket 中使用只会为 255 个不同的 IP 地址中的每一个返回 true,所以我遇到的任何其他可达性函数也会如此......我读过这是因为他们只检查是否建立了连接并且不在乎另一端会发生什么,所以我需要考虑其他事情。

我唯一能想到的其他解决方案是 ping 每个内部 IP 并查看我是否得到响应,但我不确定这是否会占用太多时间而不得不通过 255 个 IP 地址......然后,一旦我得到哪些 IP 处于活动状态,我仍然必须检查端口是否以某种方式打开:/

如果这里有人知道如何完成或有更好的想法如何检查开放端口(我不太擅长网络),我将非常感激。

谢谢阅读,

利亚姆

sockets iphone cocoa lan ports

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