小编Jef*_*f V的帖子

在UISplitViewController中,无法使showDetailViewController:sender:push into detail navigationController

在iOS 8中,视图控制器现在可以调用showDetailViewController:sender:以让系统确定正确的视图控制器以呈现详细视图控制器.

在我的应用程序中,我有一个UISplitViewController,它的viewControllers数组中包含两个UINavigationControllers.第一个UINavigationController包含我的"主"视图,UITableViewController的子类.第二个UINavigationController包含我的"详细信息"视图.

因为我试图使这项工作普遍,我试图showDetailViewController:sender:用来显示详细信息视图:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    self.itemVC.item = self.itemStore.items[indexPath.row];

    [self showDetailViewController:self.itemVC sender:self];
}
Run Code Online (Sandbox Code Playgroud)

这适用于水平紧凑特性(iPhone风格)时self.splitViewController.collapsed == YES,但不适用于特性为常规(iPad,未折叠)时.在iPad上,它用细节视图控制器替换细节UINavigationController(而不是替换UINavigationController的viewControllers数组).

为了解决这个问题,我已经测试了它是否已经崩溃,如果不是,我会在显示它之前将详细视图控制器包装在另一个UINavigationController中:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    self.itemVC.item = self.itemStore.items[indexPath.row];

    UIViewController *vcToShow;

    // For whatever reason, when not collapsed, showDetailViewController replaces the detail view, doesn't push onto it.
    if (self.splitViewController.collapsed) {
        vcToShow = self.itemVC;
    } else {
        vcToShow = [[UINavigationController alloc] initWithRootViewController:self.itemVC];
    }

    [self showDetailViewController:vcToShow sender:self];
}
Run Code Online (Sandbox Code Playgroud)

我想或者我可以配置self.itemVC并避免showDetailViewController:sender:self.splitViewController.collapsed == …

objective-c uinavigationcontroller uisplitviewcontroller ios ios8

18
推荐指数
1
解决办法
8619
查看次数

在iOS 7中以任何方式呈现UIImagePickerController的导航栏,源类型为UIImagePickerControllerSourceTypeCamera?

在iOS 6中,我使用以下代码来推送UIImagePickerController源类型UIImagePickerControllerSourceTypeCamera,并显示其导航栏.我想显示导航栏,因为在拍摄图像后,我正在推送另一个VC,允许用户在数据库中设置一些属性.

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
    cameraController = [[UIImagePickerController alloc] init];

    cameraController.delegate = self;
    cameraController.sourceType = UIImagePickerControllerSourceTypeCamera;

    [self presentViewController:cameraController animated:YES completion:NULL];

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES];
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
    cameraController.topViewController.title = @"Add";
    cameraController.navigationBar.translucent = NO;
    cameraController.navigationBar.barStyle = UIBarStyleDefault;

    [cameraController setNavigationBarHidden:NO animated:NO];
}
Run Code Online (Sandbox Code Playgroud)

在iOS 7中,此代码不再显示导航栏.有没有人知道是否有办法获取UIImagePickerController源类型的导航栏UIImagePickerControllerSourceTypeCamera

uiimagepickercontroller uinavigationcontroller ios

5
推荐指数
2
解决办法
4194
查看次数

如何为NSNumbers数组的Array数组定义Objective-C轻量级泛型?

我有一个属性NSArray包含其他NSArrays NSNumber的对象.我在头文件中为属性定义添加了一个轻量级泛型,如下所示:

@property (strong, nonatomic, readonly) NSArray<NSArray *> *myArray;
Run Code Online (Sandbox Code Playgroud)

生成的Swift界面显示:

public var myArray: [[AnyObject]] { get }
Run Code Online (Sandbox Code Playgroud)

有没有办法可以进一步标记我的财产声明,以表明这实际上是[[NSNumber]]?当我尝试NSArray<NSArray *<NSNumber *>> *myArray;或编译时,编译器对我感到不安NSArray<NSArray *><NSNumber *> *myArray;.

arrays generics objective-c ios swift

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

使用decodeObject(of:forKey :)解码符合协议的对象

我有一个Objective-C协议,需要遵守NSSecureCoding

@protocol MyProtocol <NSObject, NSSecureCoding>
…
@end
Run Code Online (Sandbox Code Playgroud)

我有一个父对象,该对象存储对符合标准的对象的引用MyProtocol,我希望父对象也符合NSSecureCoding。当我尝试这个:

required init?(coder aDecoder: NSCoder) {

    if let childObject = aDecoder.decodeObject(of: MyProtocol.self, forKey: "childObject") {
        self. childObject = childObject
    } else {
        return nil
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:'decodeObject(of:forKey:)' is unavailable in Swift: use generic 'decodeObjectOfClass(_:forKey:)'

如果您不知道所编码对象的特定类,是否可以使用NSSecureCoding?

protocols ios nssecurecoding swift

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