IOS:IOS自定义xib文件的使用笔记

初次接触UIView的加载好像和java一样,Panel,Window,Frame,Label;

有了xib文件让设计非常方便,其实到现在我也不知道有什么更好地方法去些jar程序界面,

那一个繁琐,不是说能力的事,能让人从这么繁重的界面设计中解脱出来,至少是节省了时间;

接触IOS有三四天了,明显的感觉是code界面不一样了,在其他平台开发看代码就可以了,但是在IOS上还要看xocde的界面,因为xode是很强大的工具,事件和mode中的变量都可以通过连线来建立,不过有点不好的事完全是界面,如果打开文件编辑发现好复杂,VS工具中事件和对象是在一起的,点击界面控件可以直接绑定其对应的事件,而且在文件中也可以看到类似手动创建界面的代码,也可以手动对delegate进行加减和类型的改变,IOS这个只有连线,不过也没必要去关心这个,有一点我这个新手也比较郁闷的,ios错误的代码都会进入main(){ Application.....}中,我debug没作用,错误在下面有两个note,其实吧错误错多了就会了.


xcode6.1默认Main入口是 Main.storybord,如果用xib文件直接将这个文件删除,

1,添加一个 user interface, empty 文件,将这个文件命名为 ViewController,这时项目里就有了三个名为ViewController开头的文件;

 note:在项目的general Info上面我看到有个 Main Interface 选项,我当是以为把Main删掉以后可以把ViewController.xib作为选择项,这是个很大的错误,项目一直报错,不用理会就好了;

note:在添加一个 userInface 文件不要拖动UIViewController控件到这个empty界面上,这也是个错误,这个界面的根局部是UIView,ViewController为其File,s ower;

2,将这个ViewController.xib 的custom class 设置为 ViewController.h,在file,s ower上面建立view和拖入的这个View之间连线.这在之前运行程序如果不报错的话就是黑屏的,因为他没有显示任何UIView在其上面,so 在appdelegate.m 文件中添加如下代码;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    self.window  = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds]];
    self.viewController = [[ViewControllerFirst alloc] init];
    self.window.rootViewController = self.viewController;
    self.window.backgroundColor = [UIColor redColor];
    [self.window makeKeyAndVisible];
    return YES;
}
这个时候运行,就会出现刚才拖入的UIView界面;有个奇怪的现象,如果代码里重写 loadView方法,即使是使用 super loadView,运行之后程序完全对 ViewControllerFirst.xib免疫了,不显示,但是如果这个时候在first.xib viewDidLoad中加入load自己就又会显示界面

[[NSBundle mainBundle]loadNibNamed:@"ViewControllerFirst" owner:self options:nil]
note:loadView 要么不出现,要么出现,并且出现上面这行代码;

3,在first.xib中使用自定义的其他View,当然这是个简单的SingleView;这里的代码可以看做是使用了两种方式,第一句就是加载了默认的与这个ViewControllerFirst.m自身关联的xib( xib的custom class 为ViewControllerFirst.m),从最后一句代码可以看出来,self.view == rootView ;

- (void)viewDidLoad {
    [super viewDidLoad];
    UIView *rootView = [[[NSBundle mainBundle]loadNibNamed:@"ViewControllerFirst" owner:self options:nil]
                        lastObject];
    //singleView
    UIView *singleView = [[[NSBundle mainBundle] loadNibNamed:@"SingleView" owner:nil options:nil]
                          lastObject];
    
    CGRect rect = singleView.frame;
    rect.size.width = 100;
    rect.size.height= 100;
    singleView.frame = rect;
    
    CGSize rootSize = rootView.frame.size;
    [singleView setCenter:CGPointMake(rootSize.width/rootSize.width,rect.origin.y)];
    [self.view addSubview:singleView]; //[rootView addSubview:singleView];


4,添加Cocoa touch 文件,三个独立的和 viewControllerFirst 文件一样的三个文件,因为appdelegate中设置启动纪界面为 First.m, 所以这个完全独立的ViewControllerSecond.h ,.m ,.xib文件,要添加在 first.m 的viewDidLoad中,即紧接上面的代码,大小和位置就是 CGRect 进行设置,这里就不设置了,直接添加上去;

  

 //singleViewWithSecondCustomClass
    ViewControllerSecond * singleViewWithClass = [[ViewControllerSecond alloc]init];
    [rootView addSubview:singleViewWithClass.view];


如果创建 touch文件是没有勾选创建 xib 文件,那么在ViewControllerSeond选择继续关联File,s Ower或者添加代码手动指定.m文件要加载的xib文件;

-(void)loadView{
    [super loadView];
}
- (void)viewDidLoad {
    [super viewDidLoad];
    [[NSBundle mainBundle]loadNibNamed:NSStringFromClass([self class]) owner:self options:nil];
    // Do any additional setup after loading the view from its nib.
}
xib文件大概就是这样使用 1只有xib界面,2有xib界面且关联了自己的.m文件,3有界面未关联自己的.m文件;

上面的方法同将FileOwer拖动到View上.



猜你喜欢

转载自blog.csdn.net/intbird/article/details/44140497