我正在创建一个内部使用的框架,而且我遇到了一个问题,即使用自定义视图创建一个灵活的视图控制器。
目标是实现类似于UITableViewController
的实现:
UIView
的正确子类。UIView
子类创建它自己的视图。作为第一次尝试,我覆盖-loadView
来创建自定义视图。如果你不关心笔尖你就会这么做,而且效果很好。但是,如果我尝试加载一个nib(例如,使用-initWithNibNamed:bundle:
),则执行-loadView
方法并忽略nib。
我也尝试使用-nibName
来确定是否传递了一个笔尖名称,这个PARTIALLY有效,但是如果nil
被传递则失败(这仍然有效,如果有一个与视图控制器同名的笔尖。
请记住,我正在构建一个供其他开发人员使用的框架。关键词是“灵活”和“万无一失”。
任何帮助都会比我现在更多。非常感谢。
修改:已解决
正如@ bunnyhero在下面提到的建议,在-loadView
期间检查nib的可用性并尝试重新创建它的默认实现结果证明了这一点。我已经确定了这样的事情:
- (void)loadView {
NSString *nib = self.nibName;
NSBundle *bundle = self.nibBundle;
if(!nib) nib = NSStringFromClass([self class]);
if(!bundle) bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:nib ofType:@"nib"];
if(path) {
[bundle loadNibNamed:nib owner:self options:nil];
return;
}
// Create custom view programmatically here.
}
谢谢@bunnyhero
答案 0 :(得分:3)
如果将nibName nil检查与手动检查与视图控制器同名的nib结合使用会怎样?
也许这样的事情(未经测试的代码在我的头顶):
if ([self nibName] != nil || [[self nibBundle] pathForResource:NSStringFromClass([self class]) ofType:@"xib"] != nil)
{
// nib file exists...
}
我承认这是粗暴和间接的:)