标签: nib

从xib加载UIView,在尝试访问IBOutlet时崩溃

我有一个小的xib文件UIView,它包含一些标签.现在,我正在尝试将其加载UIView到现有文件中UIViewController,并更改其中一个标签文本.我想这样做的原因是,UIView将重复使用不同的标签文本,所以我想制作一个自定义类并从xib加载它将是最好的方法.

我已经尝试了几种加载它的方法,并且我已经在我的viewcontroller上成功显示了它.问题是,一旦我尝试IBOutlet在Interface Builder中实际链接并访问它,我的应用程序崩溃了.

我创建了一个自定义UIView类,如下所示:

CoverPanel.h

@interface CoverPanel : UIView {

    IBOutlet UILabel *headline;

}

@property (nonatomic, retain) IBOutlet UILabel *headline;

@end
Run Code Online (Sandbox Code Playgroud)

CoverPanel.m

@implementation CoverPanel

@synthesize headline;

- (id)initWithFrame:(CGRect)frame 
{
    self = [super initWithFrame:frame];
    if (self) 
    {
        // Initialization code.
        //
        self = [[[NSBundle mainBundle] loadNibNamed:@"CoverPanel" owner:self options:nil] objectAtIndex:0];
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

CoverPanel.xib,我已经链接UILabel到标题出口.在我的viewcontroller中,这是我如何创建CoverPanel实例,这就是它崩溃的地方:

CoverPanel *panelView = [[CoverPanel alloc] initWithFrame:CGRectMake(0,0,300,100)];
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.它显示与UIView.xib中的布局完全相同.但是一旦我尝试改变 …

iphone xcode uiview nib

8
推荐指数
1
解决办法
8979
查看次数

使用nib创建自定义视图并在窗口中使用它

我一直在努力解决这个问题,我似乎无法自己解决这个问题.

情况就是这样:我想拥有一个基于Nib的自定义视图,它有自己的ViewController.然后我想将此视图添加到窗口中.因此,窗口应包含我的自定义视图.

所以我开始创建一个非常简单的例子:

  1. 在Xcode 4中,我创建了一个新的基于空白文档的Cocoa应用程序
  2. 我创建了一个新的Cocoa类,它应该从NSViewController(从而导致nib与.h和.m文件一起创建.创建的.h,.m和.xib文件的名称FaceViewController用于测试目的,它应该只显示现在的文字.
  3. NSViewController.xib在InterfaceBuilder中打开并添加一个多行文本组件并将其放在自定义视图中,该视图已在xib文件中.我让文本跨越整个视图.
  4. MyDocument.xib我还添加一个Custom View占位符,应该用我的自定义FaceView替换.

从这个起点开始,我试图在我的MyDocument.xib失败中包含创建的View + ViewController 以及应该显示我的文本的区域仍然是空的(就像底层窗口的背景一样).

所以我的问题确实是我需要做的,所以我的FaceView被加载到我放置的自定义视图中MyDocument.xib.以下是一些我不清楚的事情:

  • 自定义视图扩展,NSView因此我想将其更改为我的FaceView但视图不作为类存在但在xib中的InterfaceBuilder中定义,我是否需要将此设置为除此之外的其他内容NSView
  • 我是否必须分配,初始化FaceViewController代码或是否足以将其拖入我的两个.xibs中的任何一个?
  • 我可以使用InterfaceBuilder来放置我的FaceView,还是必须以编程方式执行此操作?

我真的认为创建一个这样的自定义视图将是一块蛋糕,但到目前为止,结果恰恰相反,所以任何帮助都将非常感激.

xcode cocoa interface-builder nib nsviewcontroller

8
推荐指数
1
解决办法
6274
查看次数

跨nib的NSTableView makeViewWithIdentifier

我有一个类似的问题可可-基于视图的NSTableView的,使用在多个表中一个单元,通过放大 苹果自己的文档进行makeViewWithIdentifier:owner:

"通常,标识符与Interface Builder中的外部NIB相关联,表视图将自动使用提供的所有者实例化NIB."

这似乎意味着你应该能够NSTableCellView将nib 存储在包含nib的单独nib中NSTableView.然而,在我的实验中,我只能获得包含在tableview中的单元格,我正在调用它.即,如果我将我的单元格剪切并粘贴到新的.xib文件中,则tableview将无法再找到它.我做错了什么,或者这实际上是不可能的,我在某种程度上误读了Apple的文档?

cocoa interface-builder xib nstableview nib

8
推荐指数
2
解决办法
4049
查看次数

NSArrayController初始化

我无法让核心数据支持的NSArrayController在我的代码中正常工作.以下是我的代码:

pageArrayController = [[NSArrayController alloc] initWithContent:nil];
    [pageArrayController setManagedObjectContext:[self managedObjectContext]];
    [pageArrayController setEntityName:@"Page"];
    [pageArrayController setAvoidsEmptySelection:YES];
    [pageArrayController setPreservesSelection:YES];
    [pageArrayController setSelectsInsertedObjects:YES];
    [pageArrayController setClearsFilterPredicateOnInsertion:YES];
    [pageArrayController setEditable:YES];
    [pageArrayController setAutomaticallyPreparesContent:YES];
    [pageArrayController setSortDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"index" ascending:YES]]];
    BOOL result = [pageArrayController setSelectionIndex:0];
Run Code Online (Sandbox Code Playgroud)

当我尝试调用setSelectionIndex:时,它返回YES,表示选择已成功更改.但是,对pageArrayController对象的任何后续getSelectionIndex调用都返回NSNotFound.

我不明白的是,如果我将NSArrayController放入NIB,并允许NIB文件执行初始化(在Interface Builder中具有所有相同的属性),NSArrayController正常工作.

为什么行为存在差异?NIB文件是否以特殊方式初始化这些类型的对象?我的NSArrayController初始化是不正确的?

任何帮助表示赞赏.谢谢.

macos cocoa core-data nib nsarraycontroller

7
推荐指数
1
解决办法
4350
查看次数

在UIViewController的viewDidUnload中发布IBOutlets?

我对基于Nib的UIViewControllers中发生的事情感到有点困惑.生成UIViewController子类时,模板在viewDidUnload方法中包含非常具体的注释:

// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
Run Code Online (Sandbox Code Playgroud)

这适用于哪些子视图?

  • 那些我初始化的viewDidLoad?(我会说是的)
  • 那些我初始化的initWithNibName?(我会说不)
  • 引用笔尖中的对象的IBOutlets?

如果我像这样使用视图控制器:

MyViewController *controller = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
[self.navigationController pushViewController:controller animated:YES];
[controller release];
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我想这没有多大关系是否持有到子视图引用实例变量被释放viewDidUnloaddealloc因为dealloc应该得到尽快视图控制器从堆栈中弹出,所以我还不如做苹果所谓的说,释放实例变量viewDidUnload而不是dealloc.

但是假设我用作MyViewController可以多次推送的实例变量:

if(self.myViewController == nil) {
    self.myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
}
//Change some state which should be reflected in the view
self.myViewController.someProperty = someValue; …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c uiviewcontroller nib ios

7
推荐指数
1
解决办法
2807
查看次数

为什么不调用自定义基于nib的表单元格的init方法

我有一个基于nib的表视图单元格,我在Interface builder中创建.我设置了FooTableViewCell从中扩展的表视图单元格的类UITableViewCell.

FooTableViewCell我覆盖这样的init方法:

-(id)init{

    if ((self = [super init])){
      // My init code here
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

我现在希望在实例化时调用它.但是会显示表视图,但从不调用该方法.

我可以解决这个问题,但我想完全理解它,对我而言,如果没有init调用方法,对象是如何生存的还不清楚.

objective-c nib

7
推荐指数
2
解决办法
1776
查看次数

将NIB文件转换为XIB文件

有没有办法将NIB文件转换为XIB文件,以便我可以在Xcode 4中打开它们?一旦我编辑了它们,有没有办法将它们转换回来NIB

macos xcode interface-builder xib nib

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

无法在手写笔文件中找到笔尖

我试图在手写笔中使用Nib CSS3扩展.安装的手写笔和笔尖(尝试本地和全球-g).但是当我这样做时,没有一个可行

stylus styles.styl > build/styles.css

# styles.styl
@import "nib"
Run Code Online (Sandbox Code Playgroud)

我明白了

/usr/lib/node_modules/stylus/bin/stylus:502
              throw err;
                    ^
Error: styles.styl:1
 > 1| @import "nib"
   2| 
   3| body 
   4|   background: linear-gradient(top, white, black)

failed to locate @import file nib.styl

    at Evaluator.visitImport (/usr/lib/node_modules/stylus/lib/visitor/evaluator.js:659:21)
    at Evaluator.Visitor.visit (/usr/lib/node_modules/stylus/lib/visitor/index.js:28:40)
    at Evaluator.visit (/usr/lib/node_modules/stylus/lib/visitor/evaluator.js:75:18)
    at Evaluator.visitRoot (/usr/lib/node_modules/stylus/lib/visitor/evaluator.js:521:27)
    at Evaluator.Visitor.visit (/usr/lib/node_modules/stylus/lib/visitor/index.js:28:40)
    at Evaluator.visit (/usr/lib/node_modules/stylus/lib/visitor/evaluator.js:75:18)
    at Evaluator.evaluate (/usr/lib/node_modules/stylus/lib/visitor/evaluator.js:150:15)
    at Renderer.render (/usr/lib/node_modules/stylus/lib/renderer.js:69:26)
    at /usr/lib/node_modules/stylus/bin/stylus:496:15
    at fs.readFile (fs.js:176:14)
Run Code Online (Sandbox Code Playgroud)

stylus nib

7
推荐指数
1
解决办法
3497
查看次数

使用IB从View Controller的视图加载带有XIB的自定义UIView

我有一个使用Interface Builder构建的custom UIView(MyCustomUIView).我想将这个自定义视图放在MyViewController视图中,该视图也是使用IB设计的.我在一个XIB中放置了UIView一个子视图MyViewController并将其设置为MyCustomUIView.问题是,当我运行代码时,只显示一个空白视图.(当我MyCustomUIView在代码中实例化时,它显示得很好.)

我只是initWithFrame:按以下方式覆盖该方法MyCustomUIView.m:

- (id)initWithFrame:(CGRect)frame
{
    [[NSBundle mainBundle] loadNibNamed:@"MyCustomUIView" owner:self options:nil];
    self = self.view;
    return self;
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能使视图正确加载?应该initWithCoder:怎么样?

xib uiview nib ios initwithcoder

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

使用swib中的Nib自定义UIView,而不在视图控制器中使用loadFromNib

我总是使用loadNibNamed方法将自定义视图加载到视图控制器中,但现在我试图避免在自定义视图之外调用该方法使其更可重用,这样如果另一个人使用我的自定义视图,他只需要在没有loadFromNib的情况下实例化视图,例如:

var myView: MyView = MyView()
Run Code Online (Sandbox Code Playgroud)

将视图添加到视图控制器的视图就足够了,自定义视图会将nib加载到其自身内部.我试图在Swift中做到这一点,在ObjC中我发现了代码就像这个答案:UIView和initWithFrame以及一个NIB文件.如何加载NIB文件? 但是在swift中我不能使用答案中使用的init:

- (id)initWithFrame:(CGRect)frame 
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code.
        //
        [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
        [self addSubview:self.view];
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

我有这个方法,它以无限循环结束:

override init(frame: CGRect) {
    super.init(frame: frame)
    self.loadFromNibNamed("MyView")
}
Run Code Online (Sandbox Code Playgroud)

我也尝试在MyView中添加另一个视图作为IBOutlet,就像其他答案所说并使用所有内容:

@IBOutlet var view: UIView!

override init() {
    super.init()
    NSBundle.mainBundle().loadNibNamed("MediaPlayerView", owner: self, options: nil)
    self.addSubview(self.view)
}

override init(frame: CGRect) {
    super.init(frame: frame)
    NSBundle.mainBundle().loadNibNamed("MediaPlayerView", owner: self, options: nil)
    self.addSubview(self.view)
}

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    NSBundle.mainBundle().loadNibNamed("MediaPlayerView", …
Run Code Online (Sandbox Code Playgroud)

uiview nib ios swift

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