我有一个继承自UIViewController的类.在那里,我想做一些像这样的ivar初始化:
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle { // Load the view nib
NSLog(@"Hello Earth!");
if (self = [super initWithNibName:nibName bundle:nibBundle]) {
self.visibleIndex = 0;
NSLog(@"Hello Planet!");
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我确实看到了从笔尖加载的内容.但由于另一个原因,永远不会调用此初始化程序.我从来没有收到日志消息.这有什么问题?我肯定有一个笔尖,所以实际上这必须被调用,对吧?
我是这个目标的新手 - 我想使用我按下按钮时创建的nib文件加载视图.不使用任何视图控制器..
我很肯定我在这里错过了一些简单的事情.我试图在iOS中将子视图(模态视图)加载为单独的控制器.我创建了一个NIB文件,其中一个窗口指向我的控制器视图,File的Owner类设置为我的控制器类,我尝试使用nib文件的名称调用initWithNibName,但是当我尝试显示它时,它只显示一个空白视图,而不是我在NIB文件中构建的视图.如果它是模态子控制器,它可以不是NIB中的窗口吗?或者还有其他一些我错过的东西吗?
我有3个xib文件连接到同一个类,以减少重复编码.但是,在加载新的nib文件时(即在ViewDidLoad方法中),我想要完成不同的操作.我想过做一个if语句来比较当前显示的xib的名字和字符串.我一直试图弄清楚如何在一天的大部分时间里做到这一点,但我没有运气.如果这让你感到困惑,这里有一些伪代码:
if (currentXibInDisplay == @"XibFileName1")
// Do This...
else if (currentXibInDisplay == @"XibFileName2")
// Do This...
Run Code Online (Sandbox Code Playgroud)
有办法做到这一点,对吗?看起来很简单,但我现在很难过.感谢您提供的任何信息.
如何在另一个窗口内加载笔尖?
我试过initWithWindowName,
if (mmController == NULL)
mmController = [[mainMenu alloc] initWithWindowNibName:@"mainMenu"];
[mmController showWindow:self];
Run Code Online (Sandbox Code Playgroud)
但它打开了一个新窗口.
我也尝试过loadNibNamed
[NSBundle loadNibNamed:@"mainGame" owner:self];
Run Code Online (Sandbox Code Playgroud)
它成功了,但当我尝试使用相同的方法返回主菜单时,
[NSBundle loadNibNamed:@"mainMenu" owner:self];
Run Code Online (Sandbox Code Playgroud)
它不起作用.它什么都不做......有什么想法吗?
简答:
从对象库中拖动一个Object并将其类设置为委托.
细节见下面的答案.
我不小心从mainwindow.xib中删除了app delegate.我到处查看,但仍无法找到将其添加回去的方法.我试图在网上找到它但仍然没有结果.任何人都可以帮我修复它吗?谢谢.
我的项目

其他的项目

的main.m
#import <UIKit/UIKit.h>
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, nil);
}
}
Run Code Online (Sandbox Code Playgroud) 我用a UIPopoverController来显示一个UIView.布局有点类似于a UISplitViewController所以看起来在"细节视图"上有圆角是非常奇怪的,因为它留下了一个小间隙.我还没有找到任何与其他有这个问题的人相关的东西,但这些圆角似乎是默认的样式.是否可以删除它们?
可能有用的事情:
UIViewclipsToBound = NO在viewDidLoadlayer.cornerRadius = 0在viewDidLoad在视图的顶部似乎也有一个阴影,但很难说.有什么方法可以摆脱所有这些默认样式?我只想要一个空白的方块.
使用IB,我创建了一个包含几个按钮的小子视图.我的控制器从xib文件中读取小视图,并将其作为子视图添加到主视图中.加载好,我可以看到子视图及其所有按钮.据我所知,它还连接到控制器中的IBOutlets和IBActions.
但是,当我按下按钮时没有任何反应!事实上,当我按下一个按钮时,会调用超级视图的touchesBegan! 超级视图还包含一个"普通按钮"(即我的子视图的兄弟),该按钮工作正常!问题:为什么我的子视图上的按钮不起作用?
-(void) loadMultibutt{
self.buttErase = nil; // test if the outlet connects
NSArray *arr = [[NSBundle mainBundle]
loadNibNamed:@"multibutt_ipad" owner:self options:nil];
UIView *viewButts = [arr objectAtIndex:0];
ViewWorkbench* vw = (ViewWorkbench*) self.view;
[vw addMultibuttView:viewButts];
// now, buttErase != nil.
NSSet *setTest = [self.buttErase allTargets];
NSLog(@"setTest = %@", setTest); // This works!
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试获取在nib文件中创建的视图,以用作我的UITableView中的节头.我按照这里描述的第3个选项
http://hons82.blogspot.it/2014/05/uitableviewheader-done-right.html
但是我收到了这个错误
***由于未捕获的异常'NSInternalInconsistencyException'终止应用程序,原因:'为标识符注册的无效nib(sectionHeaderIndentifier) - nib必须包含一个必须是UITableViewHeaderFooterView实例的顶级对象'
这是我正在使用的代码
UINib *sectionHeaderNib = [UINib nibWithNibName:@"headerNib" bundle:nil];
NSString *SectionHeaderViewIdentifier = @"sectionHeaderIndentifier";
[self.tableView registerNib:sectionHeaderNib forHeaderFooterViewReuseIdentifier:SectionHeaderViewIdentifier];
Run Code Online (Sandbox Code Playgroud)
和
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
NSString *SectionHeaderViewIdentifier = @"sectionHeaderIndentifier";
HeaderSection *sectionHeaderView = [self.tableView dequeueReusableHeaderFooterViewWithIdentifier:SectionHeaderViewIdentifier];
return sectionHeaderView;
}
Run Code Online (Sandbox Code Playgroud)
这是我的nib文件的屏幕截图.

问题:为什么UILabel在从XIB以编程方式创建UIView后,在init(代码附加)中没有?(参考下面的代码)这就是该行label1.text = "TBC - It was updated"引发错误
背景:我想以编程方式创建多个自定义视图,在这种情况下是多个GCDateView.我想使用一个XIB文件来布局自定义视图与关联类,以编程方式完成自定义,因此我在这里有一个GCDateView.swift和一个GCDateView.xib文件.
除了:作为第2搁置的问题,我注意到我从厦门国际银行文件GCDateView内创建视图不能直接分配是主视图(例如,在初始化结束时,我不能说self = gcDateViewView).也许我需要一个单独的问题.
从父控制器/视图中:
let dv = GCDateView()
Run Code Online (Sandbox Code Playgroud)
GCDateView:
import UIKit
class GCDateView : UIView {
@IBOutlet weak var label1: UILabel!
func commonInit() {
// Programmtically use XIB file
if self.subviews.count == 0 {
let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: "GCDateView", bundle: bundle)
let gcDateViewView : UIView = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
gcDateViewView.frame = self.bounds
gcDateViewView.autoresizingMask = …Run Code Online (Sandbox Code Playgroud) nib ×10
ios ×6
iphone ×4
uiview ×3
xib ×3
cocoa ×1
cocoa-touch ×1
compare ×1
controller ×1
delegates ×1
ipad ×1
modal-dialog ×1
swift3 ×1
uikit ×1
uitableview ×1