将xib放在UIView控件iphone中

Posted

技术标签:

【中文标题】将xib放在UIView控件iphone中【英文标题】:place xib in UIView control iphone 【发布时间】:2011-07-07 19:46:18 【问题描述】:

我知道如何在“主”视图控制器中放置一个 nib 文件:

当我执行此方法时,将显示一个新的 nib 文件。

是否可以将该 nib 文件放在 UIView 控制器中?

我想将该 nib 文件放在该视图控制器中,而不是主视图中。我怎么能那样做?


编辑:

我试着做你提到的保罗我不知道我做错了什么。无论如何,这就是我所做的:

我用你提到的方法和属性创建了另一个视图控制器。

我将IBoutlet UIView *exampleView 连接到基本视图:

然后从这里我迷路了,我不知道在哪里放置其他方法。我想将该 exampleView 放入:

那个观点。

我尝试将它们放在 pgBackground.m 中,但它不起作用。我想把它们放在一个 IBaction 中,这样我就可以通过一个按钮的内部事件来加载它。

【问题讨论】:

【参考方案1】:

我设法在 uiview 控件中放置了一个 nib 文件,但我遇到的问题是,如果设备旋转,子视图将不会旋转。我目前正在研究解决方案,但到目前为止here is a question 可以向您展示如何将视图从另一个 nib 文件添加到 uiview 控件。

【讨论】:

【参考方案2】:

如果我关注,我认为您需要:

创建一个UIView 关联xib 的子类

ExampleView.h
ExampleView.m
ExampleView.xib

设置一个属性以包含视图层次结构(您想在界面构建器中连接的所有内容)

ExampleView.h
@property (nonatomic, retain) IBOutlet UIView *exampleView;

ExampleView.m
@synthesize exampleView = _exampleView;

ExampleView.m你需要添加:

- (void)awakeFromNib

  [super awakeFromNib];
  [[NSBundle mainBundle] loadNibNamed:@"ExampleView" owner:self options:nil];
  [self addSubview:self.exampleView];

您从 nib 使用 awake,因此您可以在 Interface Builder 中使用这个子类。如果您还想在代码中实例化它,则需要在 init 方法中连接 xib。在这种情况下,我可能会像这样提取笔尖加载:

- (id)initWithFrame:(CGRect)frame

  self = [super initWithFrame:frame];
  if (self) 
    [self loadNibIntoView];
  
  return  self;


- (void)awakeFromNib

  [super awakeFromNib];
  [self loadNibIntoView];


- (void)loadNibIntoView

  [[NSBundle mainBundle] loadNibNamed:@"ExampleView" owner:self options:nil];
  [self addSubview:self.exampleView];

在 ExampleView.xib 文件中,确保将您的 IBOutlet UIView *exampleView 连接到基本视图。

现在在您想要使用自定义视图的任何 xib 文件中,只需将其拖到窗口中并将类更改为您的子类。这就是我让它工作的方式。我期待一些人提出改进建议。

【讨论】:

Paul 抱歉,我是 Objective-c 的新手,非常感谢您的帮助。看看我正在处理的编辑,问题应该很快就会更新。【参考方案3】:

你能告诉我你想做什么吗?如果你想改变方向,那么首先你在 app 委托文件中声明一个 bool en 类型变量,然后在 app delegate.m 文件中定义如果方向改变,然后检测并将布尔类型变量设置为 true 用于横向和 false 用于纵向。此过程用于接下来的所有视图。并且您希望您在主视图控制器中执行 nib,然后您有两种方法,一种是动态的,另一种是由界面生成器执行的。在界面构建器中选择导航控制器并放入主窗口文件。之后,您可以通过按 cmd+4 更改导航控制器视图的视图,然后选择您要首先显示的视图。

【讨论】:

【参考方案4】:

-(IBAction)btnSubmit_click

UIDeviceOrientation orientation = [[UIDevice currentDevice]orientation]; 

if (orientation == UIDeviceOrientationLandscapeLeft) 
   // Do stuff

else if (orientation == UIDeviceOrientationLandscapeRight) 
    // Do stuff like  [self setCordinateLandscape];

-(BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation

// Return YES for supported orientations
//set as per requirements ====>>  
return (interfaceOrientation == UIDeviceOrientationLandscapeRight);
// Or  return TRUE;

【讨论】:

以上是关于将xib放在UIView控件iphone中的主要内容,如果未能解决你的问题,请参考以下文章

控制主音量 - iPhone、Cocoa Touch

从xib初始化的UIView如何继承?

从框架加载 .xib 文件

iphone/ipad - 使用 Autoresize 和 addSubview 出现问题

根据 iPhone 屏幕大小显示不同的 xib 文件

在 XIB 中连接 UIView 并使用 Story board 中的 View Controller 加载它