我有一个应用程序,我想支持多个方向.我有两个.xib文件,我想使用myViewController.xib myViewControllerLandscape.xib. myViewController.xib并存在于project/Resources中,myViewControllerLandscape.xib并存在于根项目目录中.
我想要做的是使用单独的NIB (myViewControllerLandscape.xib)进行轮换.我尝试在viewDidLoad like中检测旋转:
if((self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (self.interfaceOrientation == UIInterfaceOrientationLandscapeRight))
{
NSLog(@"Landscape detected!");
[self initWithNibName:@"myViewControllerLandscape" bundle:nil];
}
Run Code Online (Sandbox Code Playgroud)
但我可以在gdb中看到,当应用程序以横向设备启动时,不会执行此操作.NSLog消息不会触发.为什么是这样?我做错了什么?
此外,如果我initWithNibName在viewDidLoad方法中明确地放置了函数调用,则不会加载该nib,并继续使用myViewController.xib文件.我的电话有什么问题?我应该指定捆绑吗?
谢谢!
在Xcode 4的集成界面生成器中,我是否遗漏了一些显而易见的内容,或者无法在开放的nib文件中自由缩放?
我有iphone和ipad的通用应用程序,两个故事板,如果我在iphone模拟器上运行我的应用程序viewDidLoad在nib中的每个元素的每个帧是正确的.但是,如果我为ipad(模拟器)在框架中做它为零,但屏幕看起来正确.你能告诉我什么吗?谢谢.
让我简要总结一下:nib文件中的"First Responder"是一个对象,它表示具有用户焦点的UI控件元素.因此,如果用户单击控件,则nib将单击的UI控件设置为First Responder.在我的应用程序中,我可以从笔尖找到"First Responder"的出口,这样我就可以通过点击向用户激活的任何内容发送消息"make red font color".
然后,如果此第一响应者UI控件不理解该消息,则消息将在响应者链中传递,直到父元素或祖父母(等等)UI控件元素理解该消息.否则它将被忽略.
因此,First Responder始终建立具有焦点的UI控件的"链接".是对的吗?
我有一个自定义UIView对象,nib用于定义视图/子视图布局.我的插座是连接的,当我从initWithFrame:一切启动对象时,它是有序的.
我遇到的问题是当我使用IB将其UIView嵌入另一个笔尖时; 自定义UIView出现,但它包含的子视图都没有出现 - 实际上它们的符号都解析为nil.我有一个非常小的initWithCoder:和awakeFromNib:实现(只是做记录),我的理解是,当笔尖反序列化的子视图至少应该在过程中初始化?
我自己得出的唯一结论就是两件事之一正在发生:我的插座引用是坏的/坏的并且不起作用,或者我对从笔尖加载过程的理解是错误的我是遗漏了什么.
提前致谢!
编辑:(根据要求为Nekto发布的代码......正如您将看到的,它会记录并且就是这样,嘿.)
- (id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
NSLog(@"ThumbnailGridView.initWithCoder frame= %f, %f", self.frame.size.width, self.frame.size.height);
}
return self;
}
- (void)awakeFromNib
{
NSLog(@"ThumbnailGridView:awakeFromNib");
}
Run Code Online (Sandbox Code Playgroud)
编辑2:笔尖,控制器,子视图等
Nibs:我有一个包含UIView的笔尖.这个UIView包含一个UIScrollView,它充满了另一个nib中定义的UIViews网格.(注意:这部分工作正常,因为填充是以编程方式完成的,并且与initWithFrame:call一起工作.)这里的问题是在initWithCoder之后UIScrollView符号是nil:并且awakeFromNib:都被调用,因此对象只是被添加到没有,没有任何反应.如果scrollview符号不是nil,我相信这会有效.
控制器:有两个控制器使用它,一个用initWithFrame完成:并且工作完美,另一个将它嵌入基于nib的引用.(如此处其他地方所述,在IB中定义UIView,设置自定义类.)我逐步完成了代码,并且该视图正在被正确初始化 - 只有它的子视图"缺失".
这有助于更清楚地了解情况吗?
在尝试使用initWithNibName:bundle:或类似地加载Nib或Xib文件之前,检查Nib或Xib文件是否存在的最佳方法是什么?
我有一个我之前创建的UIViewController子类,它的控件布局在XIB文件中.
我现在想在故事板中使用这个视图控制器,但看起来虽然我可以在故事板中指出视图控制器的类名,但我无法告诉它加载XIB.
我宁愿不将所有内容从XIB移动到故事板,而是将其保存在单独的XIB中.
如何在故事板中获取此UIViewController以加载我的XIB?
我创建了一个子类UIView的自定义类.我想在IB中做我的布局,所以设置了出口.问题是如何初始化我的视图以便从NIB获取它?任何帮助将不胜感激.
我正在尝试设计一个自定义UICollectionViewCell原型(在Xcode 5.0.2中),但是Interface Builder UICollectionView在设计一个笔尖时不允许我添加一个单元格.我可以设置项目(单元格)和Interface Builder创建的数量,如果我使用的是故事板,则可以完美地显示单元格,但是我无法在笔尖中将单元格添加到我的集合视图中.我试过了:
我也看到了几个关于同一问题的问题:
他们都指出以编程方式和/或使用另一个笔尖进行细胞处理.我知道怎么做,但有没有办法设计集合视图单元格,在一个nib中同一视图内的集合视图中,就像在故事板中一样?为什么Interface Builder不允许我在nib中执行它,它允许(甚至鼓励)完美地使用storyboard?
xcode interface-builder nib uicollectionview uicollectionviewcell
IBOutlets发生了一些奇怪的事情.

在代码中我尝试访问这些属性,但它们是nil.码:
class CustomKeyboard: UIView {
@IBOutlet var aButt: UIButton!
@IBOutlet var oButt: UIButton!
class func keyboard() -> UIView {
let nib = UINib(nibName: "CustomKeyboard", bundle: nil)
return nib.instantiateWithOwner(self, options: nil).first as UIView
}
override init() {
super.init()
commonInit()
}
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
// MARK: - Private
private func commonInit() {
println(aButt)
// aButt is nil
aButt = self.viewWithTag(1) as UIButton
println(aButt)
// aButt …Run Code Online (Sandbox Code Playgroud)