我一直认为可以将类作为方法参数传递,但我在实现这个概念时遇到了困难.现在我有点像:

- (id)navControllerFromView:(Class *)viewControllerClass
                          title:(NSString *)title
                      imageName:(NSString *)imageName
{
    viewControllerClass *viewController = [[viewControllerClass alloc] init];
    UINavigationController *thisNavController =
    [[UINavigationController alloc] initWithRootViewController: viewController];

    thisNavController.tabBarItem = [[UITabBarItem alloc]
                                  initWithTitle: title
                                          image: [UIImage imageNamed: imageName]
                                            tag: 3];
    return thisNavController;
}

我这样称呼它:

rootNavController = [ self navControllerFromView:RootViewController
    title:@"Contact"
    imageName:@"my_info.png"
];

这张照片怎么了?

推荐答案

- (id)navControllerFromView:(Class)viewControllerClass

只有Class,没有星号.(Class不是类名;您没有传递指向Class类实例的指针,而是传递类本身.)

rootNavController = [ self navControllerFromView:RootViewController

你不能像这样传递一个简单的类名,你必须给它发送一条消息.如果你真的想在某个地方通过这门课,你需要向它发送class条信息.因此:

rootNavController = [self navControllerFromView:[RootViewController class]
                                          title:@"Contact"
                                      imageName:@"my_info.png"
];

Objective-c相关问答推荐

将 NSInteger 转换为 NSIndexpath

NSNumberFormatter 和 'th' 'st' 'nd' 'rd' (序数)数字结尾

如何在运行时向对象添加属性?

在可可中的字符串上使用 MD5 哈希?

如何使用 Cocoa 创建临时文件?

ScrollView 手势识别器吃掉所有的事件

观察 UIDatePicker 的变化

如何判断特定的 ViewController 视图当前是否可见?

WKWebView 判断 JavaScript 返回值

UICollectionView 单元格 Select 和单元格重用

iOS 设备作为 Web 服务器

Xcode 在 iOS 8 中的 Main() 中引发异常,并带有所有异常断点

在字符串Objective-c中连接字符串

如何推送两个视图控制器但只为第二个设置动画过渡?

在 32 位和 64 位架构上格式化 NS(U)Integer 时类型转换的替代方法?

Objective-c 协议前向声明

将参数传递给由 NSTimer 调用的方法

@synthesized 保留属性的释放是如何处理的?

找出窗口中的 UIBarButtonItem 框架?

Unwind Segue 在 iOS 8 中不起作用