标签: nib

使用xib创建可重用的UIView(并从storyboard加载)

好的,StackOverflow上有很多关于此的帖子,但没有一个在解决方案上特别清楚.我想UIView用随附的xib文件创建一个自定义.要求是:

  • 没有单独的UIViewController- 一个完全独立的类
  • 类中的出口允许我设置/获取视图的属性

我目前的做法是:

  1. 覆盖 -(id)initWithFrame:

    -(id)initWithFrame:(CGRect)frame {
        self = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class])
                                              owner:self
                                            options:nil] objectAtIndex:0];
        self.frame = frame;
        return self;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. -(id)initWithFrame:在我的视图控制器中以编程方式实例化

    MyCustomView *myCustomView = [[MyCustomView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
    [self.view insertSubview:myCustomView atIndex:0];
    
    Run Code Online (Sandbox Code Playgroud)

这工作正常(虽然从来没有调用[super init],只是使用加载的笔尖的内容设置对象似乎有点怀疑 - 这里有建议添加一个子视图在这种情况下也工作正常).但是,我希望能够从故事板中实例化视图.所以我可以:

  1. UIView在故事板中放置父视图
  2. 将其自定义类设置为 MyCustomView
  3. 覆盖-(id)initWithCoder:- 我见过的代码最常适合以下模式:

    -(id)initWithCoder:(NSCoder *)aDecoder {
        self = [super initWithCoder:aDecoder];
        if (self) {
            [self initializeSubviews];
        }
        return self;
    }
    
    -(id)initWithFrame:(CGRect)frame {
        self = [super initWithFrame:frame]; …
    Run Code Online (Sandbox Code Playgroud)

objective-c storyboard uiview nib ios

79
推荐指数
5
解决办法
6万
查看次数

笔尖中的原型单元而不是故事板

为了更好的可重用性,我想在Storyboard之外创建一个表视图.

现在,当我UITableView在Xcode中使用Nib 创建基于View的控制器时,我在nib文件中获得了默认的TableView.但是,我无法在Interface Builder中添加原型单元格,就像我在Storyboard中一样.

目前是不是可以在笔尖中添加原型单元格,或者我错过了什么.

非常感谢您的帮助.

xcode objective-c nib ios uistoryboard

56
推荐指数
2
解决办法
3万
查看次数

未捕获的异常:此类不符合键值编码

我正在按照标题为"iOS的Swift教程:NSFileManager持久数据"的教程,我在29分钟左右或之后遇到错误.当我尝试在iOS模拟器上运行它时,我收到错误:

由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[setValue:forUndefinedKey:]:此类不是密钥值的编码 - 与密钥theLoadMethod兼容.

显然基于错误,我认为问题是我的theLoadMethod.以下是我在ViewController中作为此项目的一部分编写的所有代码:

let theDocumentsFolder = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let theFileName     = "/theUserFile.txt"
let thePath         = theDocumentsFolder.stringByAppendingString(theFileName)


class ViewController: UIViewController {

@IBOutlet weak var nameTextField: UITextField!
@IBOutlet weak var lastNameTextField: UITextField!
@IBOutlet weak var ageTextField: UITextField!

@IBOutlet weak var theLabel: UILabel!

// The save method
@IBAction func theSaveMethod(sender: AnyObject) {
    var name        = nameTextField.text
    var lastName    = lastNameTextField.text
    var age         = ageTextField.text

    var theString   =   "The user's information is: \(name), …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch nib ios swift nsunknownkeyexception

56
推荐指数
3
解决办法
9万
查看次数

Xcode 4.5破坏了XIB?

我正在使用新的xcode 4.5,我在一些视图控制器上有这行代码:

DiscoverCell* cell=[table dequeueReusableCellWithIdentifier:@"DiscoverCell"];
if(cell==nil){
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"DiscoverCell" 
                                                 owner:self 
                                               options:nil];
    cell = [nib objectAtIndex:0];
} 
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序时抛出:由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'NIB数据无效.' 在LoadNib上,那是什么?这个xcode是苹果垃圾吗?

xcode exception uitableview xib nib

45
推荐指数
4
解决办法
1万
查看次数

无法加载从笔尖引用的""图像

我没有名为""(没有)的图像.我已经浏览了弹出的屏幕的.xib文件,找不到任何可能导致此问题的内容.谁有同样的问题?这是完整的警告:

无法加载标识符为"com.blah.Blah"的包中从nib引用的""图像

iphone xcode objective-c nib

45
推荐指数
5
解决办法
5万
查看次数

NSInternalInconsistencyException',原因:'无法在bundle中加载NIB:'NSBundle

在我的AppDelegate中有一个我不明白的问题.RootViewController最初调用了ViewController,我改名了.该应用程序由许多ViewController组成,然后我介绍了一个UINavigationController.为什么会出现此错误?

  NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle 
  /Users/XXXXXXXXXXXX/Library/Application Support/iPhone simulator/6.0/Applications/
  B7A7D461-1CFE-4B05-AF32-00B65FCFFF49/XXXXXXXXXX.app> (loaded)'with name 
 'RootViewController''

  *** First throw call stack:
  (0x1992012 0x1357e7e 0x1991deb 0x4bafac 0x37fe37 0x380418 0x380648 0x380882 0
  x380b2a  0x397ef5 0x397fdb x398286 0x398381 0x398eab 0x398fc9 0x399055 0x49e3ab 
  0x2ef92d 0x136b6b0 0x1f12fc0 0x1f0733c 0x1f12eaf 0x38e8cd 0x2d71a6 0x2d5cbf 
  0x2d5bd9 0x2d4e34 0x2d4c6e 0x2d5a29 0x2d8922 0x382fec 0x2cfbc4 0x2cfdbf 
  0x2cff55 0x2d8f67 0x2b30 0x29c7b7 0x29cda7 0x29dfab 0x2af315 0x2b024b 0x2a1cf8 
  0x1dbedf9 0x1dbead0 0x1907bf5 0x1907962 0x1938bb6 0x1937f44 0x1937e1b 0x29d7da
  0x29f65c 0x269d 0x25c5) 
  ibc++abi.dylib: terminate called throwing …
Run Code Online (Sandbox Code Playgroud)

compiler-errors nib ios appdelegate

45
推荐指数
8
解决办法
13万
查看次数

在NIB/XIB文件中设置视图大小

在Xcode 4中,有一个永远不会修复的错误,Xcode阻止你调整视图大小(一些愚蠢的"设计功能") - 你必须确保你之前将所有topbar/statusbar/navbar/tabbar设置为"none"它会解锁控件.

XCode 5似乎已经采取了这个错误......并扩展了它!

现在完全不可能在NIB/XIB文件中编辑UIView的大小.我所做的一切都没有区别,尺寸总是只读.我真的,真的不想写源代码(这样我们的NIB +故事板现在总是看起来总是错误)来解决这个bug,但我找不到任何其他方法.

有人在Xcode中找到了一个workaroind吗?

nib ios xcode5

42
推荐指数
2
解决办法
2万
查看次数

怎么了.NIB - > .XIB?

在XCode 3.0到3.1之间,NIB-> XIB的变化是什么?当我浏览除了.nib文件之外的其他教程时,我应该知道这个名称更改有什么不同吗?

iphone xcode objective-c nib

40
推荐指数
3
解决办法
2万
查看次数

如何从自动更新中禁用Interface Builder文档版本控制?

这个问题仍然得到了很多赞成.那么看看Update3. 一旦你投票,评论,回答,请请提交雷达

查看nib/xib,修改文件,强制我提交更改或撤消更改.在存在合并冲突之前,这不是问题.

详细信息:我在一个由5位iOS开发人员组成的团队中工作,最后几个版本的XCode,我们遇到了一个问题,当任何人打开文件时都会触及/修改.xib/nib文件(不做任何更改).

如果一个开发人员认为"搞砸了,让我检查xcode所做的任何修改"并检查它,它就不会就此止步.当另一个开发人员查看该笔尖时,将再次触摸/修改两台不同计算机上的相同文件(使用相同版本的XCode和MacOS).

通常在.xib文件中修改的是这个

    <key>com.apple.ibtool.document.version-history</key>
<dict>
    <key>interface-builder-version</key>
    <dict>
        <key>com.apple.InterfaceBuilderKit</key>
        <string>2844</string>
        <key>macosx.version</key>
        <string>12C60</string>
    </dict>
</dict>
<key>com.apple.ibtool.document.warnings</key>
<dict/>
Run Code Online (Sandbox Code Playgroud)

但除此之外,它还修改或移动.xib文件中的现有键值对.

我在搜索引擎优化和谷歌上搜索了很多,而且我还没有看过很多关于这个问题的帖子.

当我升级所有笔尖以处理iPhone5屏幕时,我有一个合并冲突的噩梦,这本身并不太复杂,但由于文档版本控制而导致大量合并冲突.

删除我不理解的代码,当我尝试打开笔尖时导致xcode崩溃.(我现在修复了这个问题,恢复到之前的状态)

如何避免这个问题的任何建议,表示赞赏!

更新:已经注意到这还没有解决,并且仍然经常得到提升.我只是好奇,做任何故事板项目都遇到同样的问题吗?(我还没有在故事板上工作过).

更新2:对于遇到相同问题的所有人,请提交雷达,即使您收到回复说有现有雷达.它有助于将问题泡到顶端,而XCode的众神只会在此时解决它.

Update3:我仍然在这个帖子上看到了不少赞成,苹果错误报告仍然开放.所以,在提出这个问题之后,请提交一份雷达,详细说明我在问题中提到的(和/或添加你自己的解释)

Update4:这个问题仍然得到了很多赞成.那么看看Update3.一旦你投票,评论,回答,请请提交雷达

Update5:来自2014年WWDC上Apple Engineers的信息,此问题已在Xcode6中修复.一旦我确认这个问题已得到修复,我就会更新这个问题(可能会关闭它).

Update6:希望看到这个问题.将在WWDC2015(通过我认识的人去那里)问这个问题.如果获得WWDC门票的其他幸运者也可以在WWDC 2015上做同样的事情,那将会很棒

Update7:Xcode 7就在这里,这个bug也是如此:(原始的雷达报告(11533872)仍然是开放的

xcode interface-builder xib nib document-versioning

38
推荐指数
1
解决办法
3823
查看次数

什么是文件所有者(在"界面"构建器中)?

我是Cocoa的新手,我不理解File's Owner.nib文件的概念.

这是我看待事物的方式:

  • 考虑一个myNibFile.nib描述窗口外观的文件文件.

  • 现在,我想将一个实际窗口连接到此.nib文件.所以,我创建了一个类myWindow,它是一个子类NSWindowController.并且,为了做这个连接,我改变了init这样的方法:

         -(id)init
         {
             [super initWithWindowNibName:@"myNibFile"];
             return self;
         }
    
    Run Code Online (Sandbox Code Playgroud)

所以,我理解当我创建一个实例时myWindow,"系统"将会查看.nib文件并创建适当的对象.

所以,我的问题是:

  • 为什么我必须指定File's Owner我的.nib文件myWindow?这不是多余的吗?

  • 我想这意味着我真的不明白是什么File's Owner.它是什么 ?为什么.nib文件必须属于某个东西?它不能在我的"应用程序"中"某处",当它需要时,"系统"去那里使用它?

感谢您帮助我更清楚地了解这些新概念!

macos cocoa interface-builder nib

36
推荐指数
2
解决办法
2万
查看次数